我有一个问题,导致下拉和浏览器锁定,直到ajax请求服务。我知道ASYNC应该为JSON Ajax请求设置为False,所以我很感激有人能够帮助我修改代码,以防止在收到Ajax请求之前锁定下拉和页面。如何通过ajax请求加载JSON时停止锁定浏览器?
您可以点击此处查看:
我已经添加了5秒。睡到data.php文件使问题更加明显。
我有一个问题,导致下拉和浏览器锁定,直到ajax请求服务。我知道ASYNC应该为JSON Ajax请求设置为False,所以我很感激有人能够帮助我修改代码,以防止在收到Ajax请求之前锁定下拉和页面。如何通过ajax请求加载JSON时停止锁定浏览器?
您可以点击此处查看:
我已经添加了5秒。睡到data.php文件使问题更加明显。
你得到与异步AJAX错误的原因是该函数立即返回,这是很好,你从服务器得到的响应之前。所以你打电话给JSON.parse()
垃圾数据,这是导致你看到的错误。
的解决方案是使解析发生后你从服务器的响应:
if(year !=""){
//Get vehicle json and store into vehicles_json
getJson(
js_base_url,
function(makes_json) {
//Set makes equal to makes dropdown
var makes = $("#make");
//empty dropdown
makes.empty();
var makes_array = [];
//loop through makes_json json
$.each(makes_json, function() {
makes_array.push('<option value="', this.model_make_display, '">', this.model_make_display, '</option>');
});
makes.html(makes_array.join(''));
}
);
}
function getJson(url, callBack) {
$.ajax({
type: 'GET',
url: url,
dataType: 'json',
global: false,
success: function(json_response) {
callBack(json_response);
}
});
}
这有效,但这种方式,我将不得不为每个看起来不错的功能。任何方式返回一个数组,而不是在函数本身循环? –
不,因为正如我上面所说的,在从服务器获得响应之前,您不能从函数返回。不确定你的意思是“不好看”;你的意思是你不想重复'ajax()'调用?在这种情况下,使它只能从一个函数中调用'ajax()',并将其传递给你的回调函数。更改我的代码以显示在这种情况下如何执行此操作。 –
让我只是建议一个不同的方法来做到这一点。
$.get(url, function(res){
data = JSON.parse(res);
$(data).each(function(k,v){
$('#makes').append(html)
}
}
我决定使用jQuery的$ .getJSON,它的工作不锁定浏览器。
$.getJSON("test.php", function(json) {
console.log("JSON Data: " + json);
});
为什么它必须被设置为false?实际上,jQuery的这个特性已被废弃:http://stackoverflow.com/questions/11448011/jquery-ajax-methods-async-option-deprecated-what-now –
如果我将它设置为true,我会收到此消息: 未捕获的SyntaxError:意外的标记ü 下面是与异步相同的页面设置为true http://bit.ly/1aJRYiC –
@musical_coder据现场,'异步:FALSE'使用时才弃用推迟jqXHR的API。如果您使用的是旧回调而不是承诺,那么您可以继续在jQuery中使用同步AJAX。 –