刚刚完成一个应用程序,我需要在 json 方面再实现一件事。
我有一个 jquery 自动完成,它使用我编写的返回 json 的 Web 服务。
我需要稍微改变一下,这样如果第一个带有参数的请求返回 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¶m2=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);