以下调用在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)并且可以很好地访问数据。
有谁知道我做错了什么?
答案 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,而其他浏览器却没有多次解析。我怀疑这些是特别导致你的问题的。