以下是我缩短的代码段:
$(document).ready(function() {
$.get("/Handlers/SearchData.ashx",
function(data) {
json = $.evalJSON(data);
});
//do some other stuff
//use json data
alert(json == null);
});
警告说真的是因为evalJson尚未处理JSON数据(21kb gzipped)。在使用该数据之前,我需要以某种方式等待它完成 - 这正是我在while循环中对DoEvents所做的事情。
答案 0 :(得分:3)
不要自己执行evalJSON,为什么不让jQuery在完成时弄清楚:
$.ajax({
url:"/Handlers/SearchData.ashx",
type: "get",
dataType: "json",
success:function(d) {
//d now contains a JSON object, not a string.
alert(d==null);
}
});
答案 1 :(得分:3)
没有与DoEvents等效的东西,但您可以将依赖于JSON数据的代码放入函数中,并从AJAX回调中调用它。您也可以使用$ .getJSON方法,这样您就不必自己评估JSON。
$(document).ready(function() {
$.getJSON("/Handlers/SearchData.ashx",
function(data) {
json = data;
stuffToDoAfterIHaveData();
});
//do some other stuff
});
//use json data
function stuffToDoAfterIHaveData() {
alert(json == null);
}
或者,jQuery提供了一种使AJAX请求同步的方法(即它们会停止代码执行,直到响应返回)。您可以使用$.ajaxSetup({ async: false });
,也可以直接调用$.ajax
方法并在选项对象中传递async:false
。
答案 2 :(得分:2)
javascript中与doEvents类似的唯一东西是setTimeout()。 第一个参数应该是一个字符串,其中包含要在“系统事件”完成后执行的代码,第二个参数是要等待的milisecs数... 这很复杂,但这是我所知道的唯一解决方案。
答案 3 :(得分:2)
您可以这样使用:
$(document).ready(function(){
json = $.parseJSON(
$.ajax({url: '/Handlers/SearchData.ashx', async: false}).responseText
)
alert(json == null);
})