我有一些代码用于调用$.ajax
function doajax(url, dataType, data, method, context, callback, block) {
block = typeof block !== 'undefined' ? block : true;
if (block) {
showOverlay();
}
var settings = {
dataType: dataType,
data: data,
type: method,
url: url,
error: onerror,
success: function (data, textStatus, jqXHR) { onsuccess(data, textStatus, jqXHR, context, callback); }
};
$.ajax(url, settings);
console.log("doajax: called $.ajax");
return false;
}
function onerror(jqXHR, textStatus, errorThrown) {
console.log("doajax: error");
hideOverlay();
formSpinner.stop();
var extra = jqXHR.hasOwnProperty("responseJSON") ? jqXHR.responseJSON.error : jqXHR.responseText;
alert("Error (" + jqXHR.status + ") :: " + textStatus + " :: " + errorThrown + " :: " + extra);
}
function onsuccess(data, textStatus, jqXHR, context, callback) {
console.log("doajax: success");
hideOverlay();
formSpinner.stop();
if (data.status === 200 || data.status === 201) {
hooks[callback](data, context);
}
else {
alert("Error (" + jqXHR.status + ") :: " + textStatus + " :: " + data.error);
}
}
一切正常,但现在,服务器没有收到请求,Chrome
网络窗口显示GET 200 OK
,无论是GET
还是POST
或url: url
请求。
在网络标签中,$.ajax settings
的{{1}}参数没有请求,而是我看到当前页面的请求,生成200 OK
响应。
不会抛出任何错误,也不会调用成功函数。
我一直在研究可能的缓存问题,但POST
请求永远不会被缓存,所以我不确定发生了什么。
编辑:添加了console.log()
,在执行了一个应该触发日志显示$.ajax()
调用的UI功能后:
doajax:调用$ .ajax
我还打开了Log XMLHttpRequests
,我看到确认请求确实生成但是对于当前页面url
,而不是通过settings
传入的参数
答案:这是jQuery
版本的问题。我发现在我刚刚集成此代码的地方使用了旧版jQuery
。当我将jQuery 1.11
放在我的代码之上时,一切正常。
所以实际问题是,jQuery 1.5
之前不支持$.ajax(url, settings);
,只能使用$.ajax(settings);
。
我可以确认使用jQuery 1.5+
或将我的代码更改为$.ajax(settings);
都可以解决问题。