$ .getJSON的同步等效方式

时间:2015-02-23 09:59:01

标签: jquery

我有这个代码示例,它以JSON格式返回数据以放入slickGrid:

$.getJSON(url, function(data) { 
    $.each(data, function() { dataReturn.push(this); });
    ...
    myDataView.setItems(dataReturn); 
    ...
});

但我正在寻找一种同步方式,我尝试过这样的事情:

var dataReturn = JSON.stringfy( $.ajax({url:"...", async: false }).responseText );
myDataView.setItems(dataReturn);

但似乎不是真的一样......我错过了什么?

提前致谢 干杯 路易

2 个答案:

答案 0 :(得分:2)

使用$.ajax并像这样设置async : false

$.ajax({
        url:url, 
        dataType : 'json',
        async : false,
        success : function(data) { 
            $.each(data, function() { dataReturn.push(this); });
             ...
            myDataView.setItems(dataReturn); 
            ...
            }
});

答案 1 :(得分:0)

您缺少dataType参数(请参阅jQuery documentation):

$.getJSON()是:

的简写
$.ajax({
  dataType: "json",
  url: url,
  data: data,
  success: success
});

尝试避免同步通话。引自jQuery doc (see async prop)

  

跨域请求和dataType:“jsonp”请求不支持   同步操作。请注意,同步请求可能是暂时的   锁定浏览器,在请求处于活动状态时禁用任何操作。

你可能想尝试这样的jQuery Deferreds

var jqxhr = $.getJSON(url);
jqxhr.done(function(data) {
    $.each(data, function() { dataReturn.push(this); });
        ...
        myDataView.setItems(dataReturn); 
        ...
    });
});