8

PHP ページには、jQuery 変更機能をトリガーするドロップダウン リストがあり、ページに 2 番目のドロップダウン リストを設定するために AJAX で POST を実行します。

すべて非常に単純なはずですが、Firebug は「?」の構文エラーをスローします。実行時にコードに表示されますが、実際にはコードにはありません。

これは私のJavaScriptコードです:

$(document).ready(function() {
    $('#taglist').change(function(){
        $.ajax({
            type: "POST",
            url: "../includes/ajax.php",
            data: "taglist=" + $(this).find("option:selected").attr('value'),
            dataType: 'json',
            success: function(response, textStatus, jqXHR) {
                $("#catlist").html(response.catlist);
            },
            error: function (xhr, textStatus, errorThrown) {
                $("#catlist").html(xhr.responseText);
            }
        });​
    });
});

以下は、ajax.php で実行される PHP コードです。

if(isset($_POST['taglist'])){
    $catlist = '<select name="cat_id[]" size="5" multiple id="cat_id[]">';
    $catlist .= fillselecteditmultiple(0, 0, $_POST['taglist']);
    $catlist .= '</select>';

    echo json_encode(array("status"=>"success", "catlist" => $catlist));
}

fillselecteditmultiple() は、事前に選択する必要がある、取り込まれた強調表示のオプションを出力します。他のページで問題なく使用しているので問題なく動作します。関数自体からスローされたエラーではないことを確認するために、単純な $catlist='abc' 文字列を応答として出力するように関数を変更しようとしましたが、それでも同じエラーです。

奇妙な部分は、添付の画像でわかるように、Firebug が JavaScript コードの最後の 2 行でエラーをスローすることです。

Firebug エラー 実行時のソースコード

「?」の原因は何ですか? コードに表示するには?

4

4 に答える 4

5

エンコーディングを確認してください。行末に「奇妙な」記号が表示される場合、そのほとんどはエンコードの問題が原因である可能性があります。

さらに、一般的なアドバイス:

プログラムが Unicode コード ポイントを表す方法を知らない場合、四角形の中に疑問符を出力するか (以前に見たことがあると思います)、それができない場合は単純な疑問符を出力します。予期しないクエスチョン マークがあると、開発者は常にエンコーディングを疑うようになります。
(c)アクセル

于 2012-12-05T09:31:39.550 に答える
1

このデータを JavaScript コードで送信し、

data: "tag=" + $(this).find("option:selected").attr('value')

しかし、php ファイルでは $_POST['taglist'] を取得しようとすると、

変数名は同じではありません。

データを変更してみてください: "taglist=...." または $_POST['tag']。

于 2012-12-05T07:55:56.940 に答える
1

コードを段階的にデバッグします。最初にelseステートメントをajax.phpファイルに入れ、実行場所を確認します。ifステートメントに含まれる場合は、die()各行に関数を配置して、エラーが発生した場所を確認します。コードで考えられるエラーの 1 つはtag、ajax 関数を送信していて、$_POST['taglist']. #taglistこの ajax 関数をトリガーすると、その値は投稿されません。属性で指定した値のみdataが投稿されます。したがって、if条件を次のように変更します

から

if(isset($_POST['taglist'])){

if(isset($_POST['tag'])){

これが理由かもしれません。それ以外は良いです。

于 2012-12-05T07:56:20.997 に答える
0

そこにスペースがあると思います.. });の後のスペースを削除してください</p>

于 2012-12-05T07:47:53.303 に答える