Javascript DoEvents等效吗?

时间:2009-07-16 14:36:55

标签: asp.net javascript jquery

以下是我缩短的代码段:

$(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所做的事情。

4 个答案:

答案 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);
})
相关问题