我正在使用JavaScript下面的Ajax代码,我试图在URL无法正确加载JSON时弹出一个对话框,原因可能是过期令牌或不正确令牌,无论如何,我期待用于查找错误或失败的代码,但它没有发生。当URL可以成功加载JSON时,正在按预期命中成功和完成块,但是当URL失败时没有任何内容被击中。我曾尝试使用async: false
并试图检查一个布尔变量weHaveSuccess,但是代码的最后一行中的console.log(weHaveSuccess);
即使在执行成功/错误之前也会执行,在我看来就像它仍然异步加载一样。我想知道为什么当URL中的JSON加载失败时,没有命中错误块。
我的代码
function checkUser(myURL, newAccessToken, weHaveSuccess) {
$.ajax({
type: "GET",
dataType: "jsonp",
async: false,
url: myURL + newAccessToken,
error: function (XMLHttpRequest, textStatus, errorThrown) {
console.log("Status: " + textStatus);
console.log("Error: " + errorThrown);
},
success: function (data) {
console.log("Hello 2 " + JSON.stringify(data));
weHaveSuccess = true;
console.log('Message from Success ' + weHaveSuccess);
},
complete: function () {
console.log('Message from Complete ' + weHaveSuccess);
}
}).done(function (data) {
alert("Success");
console.log(data);
}).fail(function (data) {
console.log(data);
alert("Failed");
}).always(function () {
alert("In Always");
});
console.log(weHaveSuccess);
}
提前致谢!
答案 0 :(得分:0)
AJAX请求是异步的。远程请求需要时间并作出响应。您必须在success
函数内编写您的响应后代码,或者从那里调用另一个函数,而不是在调用启动的范围内。
我在这里猜一下你的服务器在失败时返回的内容。 AJAX请求成功意味着只接收到200 OK
响应,而不考虑数据的内容。如果错误只是数据的更改,则需要执行以下操作之一以显示错误:
400 Bad Request
。success
函数中查看data
内的任何错误响应,并在那里触发alert()
。答案 1 :(得分:0)
首先,console.log(weHaveSuccess);
首先触发,因为$.ajax()
是异步的,而console.log不是,所以ajax将被触发并在完成时返回promise,但浏览器将继续使用脚本。
在jQuery中,ajax文档说:
跨域请求和dataType:“jsonp”请求不支持 同步操作。
如果没有看到响应就很难调试,也许你可以从网络或URL添加一些信息?
答案 2 :(得分:0)
如果您尝试以下操作怎么样:
将jsonp
设置添加到$.ajax()
函数中以获取将处理响应的回调,并将console.log添加到那里:
function myCallback(data) {
console.log(data);
}
$.ajax({
type: "GET",
dataType: "jsonp",
jsonp: myCallback,
...