1

私はこのようなjquery自動補完プラグインを使用しています

$( "#city" ).autocomplete({
            source: function( request, response ) {
                $.ajax({
                    url: "http://www.abc.com/test.php",
                    dataType: "jsonp",
                    data: {
                        featureClass: "P",
                        style: "full",
                        maxRows: 12,
                        name_startsWith: request.term
                    },
                    success: function( data ) {
                        alert("hello");
                    }
                });
            },
            minLength: 2,
            select: function( event, ui ) {
                log( ui.item ?
                    "Selected: " + ui.item.label :
                    "Nothing selected, input was " + this.value);
            },
            open: function() {
                $( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
            },
            close: function() {
                $( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
            }
        });

成功してもアラートボックスが表示されません。

Firefoxは、これを応答として取得していることを示しています

[{"label":"mark2","value":1},{"label":"abc1","value":20}]

それは見返りに何か他のものを期待していますか

4

1 に答える 1

3

これを取得した例は正常に機能し、 jsfiddleを使用して同じ例を複製すると期待どおりに機能するため、ページの他の場所でjavascriptエラーが発生し、それ以上のjavascriptの実行が停止している可能性があります。

alertまた、成功コールバックにを入れるだけの変更で例を複製しました-これも正常に機能しますが、jQueryUIオートコンプリートのドキュメントには次のように記載されていることに注意してください。

リクエスト中のエラーを処理するカスタムソースコールバックを提供する場合は重要です。エラーが発生した場合でも、常に応答コールバックを呼び出す必要があります。これにより、ウィジェットが常に正しい状態になります。

それはあなたの間違いではありませんが、注目に値します!


編集あなたのajax呼び出しが実際にサーバー側エラー(http500)を生成している場合、successコールバックに入ることはなく、アラートを受け取ることもありません。エラーコールバックをajax呼び出しに追加して、これが当てはまるかどうかを確認してください。

$.ajax({
    url: "http://www.abc.com/test.php",
    dataType: "jsonp",
    data: {
        featureClass: "P",
        style: "full",
        maxRows: 12,
        name_startsWith: request.term
    },
    success: function( data ) {
        alert("hello");
    },
    error: function (xhr, textStatus, errorThrown){
        alert("error: " + errorThrown);
    }
});
于 2012-08-08T08:42:59.740 に答える