问题描述
||
以下调用在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),并且可以正常访问数据。
有人知道我在做什么错吗?
解决方法
关于您不知道如何避免
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);
});
, 这里是我用来克服这些挑战的语法,而不是在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
}
});
您可以在Ajax调用成功时在成功事件和\“ stack \”事件中同时运行随后的javascript / jquery。这样,如果可行,它将继续进行。否则,错误处理可能会以您定义的方式在提供的错误部分中发生。通常,我会在点击处理程序上触发ajax调用,但是一定可以在您选择的函数中运行它。请务必检查您的返回JSON(例如,可以从您的处理页面邮寄),以确保它是有效的JSON。 Jsonlint是您的朋友!
我已经让chrome有效地解析了错误的HTML和JSON,而其他浏览器却几次都没有。我怀疑这是特定原因导致的问题。