jQuery $ .ajax调用适用于Chrome,但不适用于任何其他浏览器

时间:2011-06-15 04:35:58

标签: javascript jquery ajax google-chrome

以下调用在Chrome中完美运行,但在其他所有浏览器中都失败。

function getInfo(r,c,f){
  return $.parseJSON($.ajax({
      url: baseURL + 'somethingAPI/getInfo',
      data: {
        "data_r": r,
        "data_c": c,
        "data_f": f
      },
      //success: function(data){},
      dataType: "json",
      async: FALSE
    }).response);
}

是的,我正在使用同步ajax调用,我认为这是必要的,因为我不希望任何其他JS在没有执行和返回数据的情况下运行。虽然,我不完全确定成功回调是否应该发生其他事情。

无论如何,在Chrome中我获得了响应对象(JSON)并且可以很好地访问数据。

有谁知道我做错了什么?

2 个答案:

答案 0 :(得分:1)

关于你不知道如何避免async: false的观点,这是否就像你想要完成的那样?

function getInfo(r, c, f, callback) {
  $.ajax({
    url: baseURL + 'somethingAPI/getInfo',
    data: {
      "data_r": r,
      "data_c": c,
      "data_f": f
    },
    dataType: "json",
    success: callback,
  });
}

getInfo('foo', 'bar', 'baz', function(response) {
  console.log(response);
});

答案 1 :(得分:0)

而不是在ajax查询上解析json,这是我用来克服这些挑战的语法

    $.ajax({
       url: "pagegoeshere.php",                   
       timeout: 30000,
       type: "POST",
       data: 'data1='+data1+'&data2='+data2,
       dataType: 'json',
       error: function(XMLHttpRequest, textStatus, errorThrown)  {
         alert("An error has occurred making the request: " + errorThrown)
       },
       success: function(returnjson){                                                                                                   
           var returnstuff = returnjson.returnstuff;
           //Do next Javascript step here
       }
});

您可以在成功运行随后的javascript / jquery,并在Ajax调用成功时“堆叠”事件。这样,如果它有效,它就会继续。否则,错误处理可以以您定义的方式在提供的错误部分中进行。我通常在单击处理程序上激活我的ajax调用,但是在你选择的函数中运行它肯定是可行的。请务必检查您的返回JSON(例如,可以从您的处理页面邮寄)以确保它是有效的JSON。 Jsonlint是你的朋友!

我已经使用chrome有效地解析了错误的HTML和JSON,而其他浏览器却没有多次解析。我怀疑这些是特别导致你的问题的。