-1

以下のコードでelse{と言い続けるときに発生する、この構文エラーはまったくありません。

$(document).ready(function () {

    var courseinfo = <?php echo json_encode($courseInfo);?> ;

    $('#coursesDrop').change(function () {
        var courseId = $(this).val();

        /*
            You only need to do all of this if user selects a course, so check that first.
        */
        if (courseId !== '') {
            /*
                Iterate over courses and, if the one we want exists, populate its info.
            */
            for (var i = 0, l = courseinfo.length; i < l; i++) {
                if (courseinfo[i].CourseId == courseId) {
                    $('#currentDuration').val(courseinfo[i].Duration);
                    $('#newDuration').val(courseinfo[i].Duration);
                    $('#currentCourseId').val(courseinfo[i].CourseId);
                    $('#newCourseId').val(courseinfo[i].CourseId);

                    var text = $(this).find('option:selected').text();
                    var split = text.split(' - ');
                    $('#currentCourseNo').val(split[0]);
                    $('#currentCourseName').val(split[1]);

                    /*
                        Without this break, the loop will continue until i = l.
                        We've already found our match, no need to continue.
                    */
                    break;
                }
            }
        } else {
            $('#currentCourseNo,#currentCourseName,#currentDuration,#currentCourseId').val('');
        }
    });
});

角かっこは正しいようですが、上記のコードでこの構文エラーが発生するのはなぜですか?

正確なエラーはSyntaxerror: syntax error、ビューページのソースでこれを強調表示していることを示していますelse{

var courseinfo = <?php echo json_encode($courseInfo);?> ;以下のページソースにこれを出力します。

var courseinfo = [{"CourseId":1,"CourseNo":"INFO101","CourseName":"Bsc Information Communication Technology","Duration":"4"},{"CourseId":2,"CourseNo":"INFO102","CourseName":"Bsc Computing","Duration":"3\/4"},{"CourseId":8,"CourseNo":"INFO103","CourseName":"Business and Finance","Duration":"3"},{"CourseId":9,"CourseNo":"INFO107","CourseName":"Mathematics","Duration":"4"}];
4

3 に答える 3

3

コメントとTJCrowderによって示されている行が実際にJavaScriptに含まれている場合は、phpスクリプトに戻ってスペースを削除してください。<? php

于 2012-12-06T13:13:12.980 に答える
3

ブラウザーでページを開いてエラーを取得し、[ソースを表示] を実行して、実際にブラウザーに表示された内容を確認する必要があります。

考えられる原因は次の行です。

var courseinfo = <?php echo json_encode($courseInfo); ?> ;

3 つの可能性:

  1. 私は PHP の専門家ではありませんが、<? php(スペースなし?ではなく) 本当に有効な開始タグですか? そうでない場合は、PHP がそれを処理していない可能性があり、テキストが逐語的にブラウザーに送信されている可能性があります。これは当然問題になります。<?php あなたは、その空間は実際には存在しないと主張します。

  2. そうでない場合は$courseInfo、PHP が期待どおりではないため、正しく出力されていないと思われます。出力を取得するものを引用しましたが、これは有効な配列リテラルです。

  3. 引用したテキストが、PHP が前処理するファイルに含まれていない場合、コードがブラウザーに送信されるため、問題になります。通常、Web サーバーは PHP を使用して.phpファイルを前処理するように構成されていますが、ファイルは使用しません.js。したがって、引用したテキストが.jsファイル内にある場合、それはそのまま (PHP コードを含む) ブラウザーに送られますが、これはおそらく望ましくありません。出力が処理されたと引用したので、前処理されているに違いないと思います。

  4. 私の最終的な考えは、問題の近くのテキストに目に見えない文字があるということですelse. その行全体を削除して (念のため、おそらく両側の数行)、それらを (慎重に) 再入力してみてください。

于 2012-12-06T13:11:22.950 に答える
0

問題が特定されているかどうかわかりません... HTML行が表示されないため...しかし、次のコードを試してみませんか:

$(function(){
var courseinfo = <?php echo json_encode($courseInfo);?>;
$('#coursesDrop').change(function(){
    var courseId = $(this).val();

    /*
        You only need to do all of this if user selects a course, so check that first.
    */
    if (courseId != ''){
        /*
            Iterate over courses and, if the one we want exists, populate its info.
        */
        for (i = 0;i < courseinfo.length;i++){
            if (courseinfo[i].CourseId == courseId){
                $('#currentDuration').val(courseinfo[i].Duration);
                $('#newDuration').val(courseinfo[i].Duration);
                $('#currentCourseId').val(courseinfo[i].CourseId);
                $('#newCourseId').val(courseinfo[i].CourseId);

                var text = $(this).find('option:selected').text();
                var split = text.split(' - ');
                $('#currentCourseNo').val(split[0]);
                $('#currentCourseName').val(split[1]);

                /*
                    Without this break, the loop will continue until i = l.
                    We've already found our match, no need to continue.
                */
                break;
            }
        }
    } else {
        $('#currentCourseNo,#currentCourseName,#currentDuration,#currentCourseId').val('');
    }
    });
});

うまくいかない場合は、申し訳ありません....頑張ってください

于 2012-12-06T13:21:53.493 に答える