6

アプリを完成させるだけで、json側にもう1つ実装する必要があります。

私が書いたjsonを返すWebサービスを使用するjqueryオートコンプリートがあります。

これを少し変更して、パラメータを含む最初のリクエストがnullを返した場合に、マスター検索を行うパラメータを含まないデフォルトのURLで再試行するようにする必要があります。

私が言ったトリックを見逃していないことを確認するために、jqueryの達人がこれを達成するためのエレガントな方法を持っているかどうかを尋ねて確認します。

var cache = {},lastXhr;
var web_service_url_default = "http://json_sample.php";
var web_service_url_specific = "http://json_sample.php/?param1=hello&param2=world";

var autocomp_opt = {
        minLength: 1,
        source: function( request, response ) {
            var term = request.term;
            if ( term in cache ) {
                response( cache[ term ] );
                return;
            }

            lastXhr = $.getJSON( web_service_url_specific, request, function( data, status, xhr ) {
                cache[ term ] = data;
                if ( xhr === lastXhr ) {
                    response( data );
                }
            });
        }
};

これは、オートコンプリートのオプション変数であり、次のようにオートコンプリート呼び出しに入力され、正常に機能します。

$('.some_class').autocomplete(autocomp_opt);

最初のリクエストが空を返した場合に、パラメータなしでデフォルトのリクエストを起動するように変更する必要があります。

いつものように助けを応援します。


実例で更新

これが完了しました。誰かに役立つ場合に備えて、次のコードを参照してください。それは最もエレガントではないかもしれませんが、とにかく動作します。

この例とテストでは、キャッシングがうまく機能していないようで、リクエストが何度も実行されなかったため、削除したことに注意してください。今では100%動作します。

var autocomp_opt = {
            minLength: 1,
            source: function( request, response ) {
                var term = request.term;

                lastXhr = $.getJSON( web_service_url_specific, request, function( data, status, xhr ) {
// check if there is only one entry in the json response and if the value is null, my json script returns empty like this
                        if(data.length == 1 && data[0].value == null){
                            $.getJSON( $web_service_url_default, request, function( data, status, xhr ) {
                                response( data );
                            });
                        }else{
                            response( data );
                        }
                });
            }
        };

$('.some_class').autocomplete(autocomp_opt);
4

2 に答える 2

3
if(data.length == 1 && data[0].value == null) 
{
    ...
}

私はなんとかこれを自分で動かすことができました。誰かに役立つ場合は、上記の例を参照してください。これを行うのに最もエレガントな方法ではないかもしれませんが、それでも機能します。乾杯。

于 2013-01-28T15:06:36.363 に答える
0

「空のリクエストリターン」はリクエストの失敗を意味すると思います(たとえば、エラー、空の文字列などではありません)。$ .ajaxを使用してajax呼び出しを作成し、エラー関数にフックすることができます。

$.ajax({
  url: web_service_url_specific,
  data: request,
  dataType, 'json',
  success: function( data, status, xhr ) {
    // not going to question this part
    cache[ term ] = data;
    if ( xhr === lastXhr ) { response( data ); }
  },
  error: function() {
    // fallback ajax call
    $.ajax({});
  }
});
于 2013-01-28T15:09:58.973 に答える