0

この関数は、テキストボックスのキーダウン時に呼び出されます

function autoComplete(type, select) {
    $('#search_name').autocomplete({
    source: function( request, response ) {
        $.ajax({
        url: "/searches/autoComplete",
        dataType: "json",
        data: {
            term: $.trim(request.term)
        },
        success: function( data ) {
            response( $.map( data, function( item ) {
            return {
                label: item.value,
                value: item.value,
                type : item.type,
                id   : item.id
            }
            }));
        }
        });
    },
    minLength: 2,
    select: function( event, ui ) {
        var url = ui.item.type + '/edit/' + ui.item.id;
        $(location).attr('href', url);
    }
    });

}

コンソールにチェックインすると、次のようなエラーが発生します

a is null

..."resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b...

このエラーは、応答dataが返されない場合にのみ発生します。それ以外の場合は正常に機能しています。

このエラーを回避する方法は?

4

1 に答える 1

0

データを返すリクエストを期待しているのにnullが返される場合は、それを成功としてではなく失敗として扱う必要があります。サーバーコードで、要求されたデータを返すことができない場合は、404などを返す必要があります。

編集:以下のコメントから、これはheader("HTTP/1.0 404 Not Found");PHPで使用することで最もよく解決されたようです。

エラーを回避するためにJavaScriptをチェックインすることもできると思いますが、それは実際にはクリーンな解決策ではありません。

success: function( data ) {
    if(data) {
        response( $.map( data, function( item ) {
            return {
                label: item.value,
                value: item.value,
                type : item.type,
                id   : item.id
            }
        }));
    }
}
于 2012-07-26T10:58:59.947 に答える