【发布时间】:2016-05-07 23:04:22
【问题描述】:
我正在使用 jQuery ajax 调用第三方网页。根据他们的页面,如果登录成功,他们会向我发送状态代码 200,如果登录不成功,则会向我发送 401。这是我的 jquery 代码示例。此代码在 IE 上运行良好,但在 Chrome 或 Firefox 上无法运行。可能是什么问题?
$.ajax({
type: 'GET',
url: hostURL + 'j_teo_security_check?callback=?',
dataType: 'json',
data: ({j_username : $("#inp_user_name").val(), j_password: $("#inp_user_pwd").val()}),
statusCode: {
401:function() { alert("401"); },
404:function() { alert("404"); },
200:function() { alert("200"); },
201:function() { alert("201"); },
202:function() { alert("202"); }
},
complete: function(httpObj, textStatus){
alert(httpObj.status);
},
error: function(){
alert("error");
},
async: false
});
我尝试了所有函数error、success、complete和statusCode。他们都没有处理 401 错误。
【问题讨论】:
-
firebug 上的请求/响应是否正常?
-
在 IE 和 Chrome (
console.log他们) 上发送的数据是什么?您没有多个 ID 为inp_user_name或inp_user_pwd的元素吗?尝试添加cache: false选项。此外,您可以删除data: ([...])行上的括号。另外,你有使用的 HTML 代码吗?那些“inp_user_xxx”是什么类型的元素? -
没有。一切正常,符合要求。当我通过正确的密码时,状态码 200 没有问题。当我发送错误的密码时,它会得到响应代码 401。我想在它是 401 时捕捉它。但没有一个函数支持它。我尝试了所有的函数error、success、complete和statusCode。我的要求是捕捉 401 错误。不要阻止它。
-
尝试将您的请求类型从 GET 更改为 HEAD,并通过 console.log 返回结果以查看标头中实际设置的状态代码。不确定它是否相关,但也尝试在代码后添加一个空格,例如
401: function() {},已经多次使用 statusCode 设置而没有问题,也适用于 401,这样应该可以工作,但不确定它是否适用于 json。是否是同源请求等。 -
您收到警报了吗?错误:函数(xhr,状态,抛出错误){警报(xhr.status)}
标签: jquery ajax jquery-mobile