下面是我的简短代码片段:
$(document).ready(function() {
$.get("/Handlers/SearchData.ashx",
function(data) {
json = $.evalJSON(data);
});
//do some other stuff
//use json data
alert(json == null);
});警告说是真的,因为evalJson还没有完成对JSON数据的处理(21kbgzip)。在使用该数据之前,我需要以某种方式等待它完成-这正是我在while循环中对DoEvents所做的事情。
发布于 2009-07-16 14:41:14
没有等同于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方法并在options对象中传递async:false。
发布于 2009-07-16 14:40:40
与其自己执行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);
}
});发布于 2009-11-16 19:54:22
在javascript中唯一类似于doEvents的是setTimeout()。第一个参数应该是一个字符串,其中包含您希望在“系统事件”完成后执行的代码,第二个参数是要等待的milisecs数……这很复杂,但这是我知道的唯一解决方案。
https://stackoverflow.com/questions/1138066
复制相似问题