Javascript DoEvents相当于?
问题描述:
这里是我的短代码片段:因为evalJson不这样做处理JSON数据,但(21KB gzip压缩)Javascript DoEvents相当于?
$(document).ready(function() {
$.get("/Handlers/SearchData.ashx",
function(data) {
json = $.evalJSON(data);
});
//do some other stuff
//use json data
alert(json == null);
});
警告说真的。我需要以某种方式等待它在使用该数据之前完成 - 正是我在while循环中使用DoEvents做的事情。
答
没有相当于调用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
。
答
而是自己执行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);
}
});
答
类似于javascript中的doEvents的唯一情况是setTimeout()。 第一个参数应该是一个字符串,在完成“系统事件”后要执行的代码,第二个参数是要等待的毫秒数... 这很复杂,但这是我所知道的唯一解决方案。
答
你可以使用这样的:
$(document).ready(function(){
json = $.parseJSON(
$.ajax({url: '/Handlers/SearchData.ashx', async: false}).responseText
)
alert(json == null);
})
这并没有解决他的关于推迟执行代码,直到XHR返回后的问题。 – Prestaul 2009-07-16 14:46:06
当然可以。成功函数仅在请求和JSON解析成功后才调用,因此解决了他的两个问题。 – Salty 2009-07-16 17:41:55