我有一个问题导致下拉列表和浏览器锁定,直到提供 ajax 请求。我知道 JSON Ajax 请求的 ASYNC 应该设置为 False,所以如果有人可以帮助我修改代码以防止在收到 Ajax 请求之前锁定下拉列表和页面,我将不胜感激。
你可以在这里查看:
我增加了 5 秒。睡眠到 data.php 文件,使问题更加明显。
我有一个问题导致下拉列表和浏览器锁定,直到提供 ajax 请求。我知道 JSON Ajax 请求的 ASYNC 应该设置为 False,所以如果有人可以帮助我修改代码以防止在收到 Ajax 请求之前锁定下拉列表和页面,我将不胜感激。
你可以在这里查看:
我增加了 5 秒。睡眠到 data.php 文件,使问题更加明显。
让我建议一种不同的方法来做到这一点。
$.get(url, function(res){
data = JSON.parse(res);
$(data).each(function(k,v){
$('#makes').append( html )
}
}
您收到异步 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);
}
});
}
我决定使用 jQuery $.getJSON 并且它在不锁定浏览器的情况下工作。
$.getJSON( "test.php", function( json ) {
console.log( "JSON Data: " + json);
});