JQuery ajaxを使用してサードパーティのWebページを呼び出しています。彼らのページによると、ログインが成功した場合はステータスコード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エラーを処理しません。
以下のように修正できました。
$(document).ready(function(){
$("#cmdLogin").click(function(){
var request = $.ajax({
url : hostURL + 'j_teo_security_check',
data: ({j_username : $("#inp_user_name").val(), j_password: $("#inp_user_pwd").val()}),
dataType : "jsonp",
timeout : 5000
});
request.success(function() {
loginSuccess();
});
request.error(function(httpObj, textStatus) {
if(httpObj.status==200)
loginSuccess();
else
loginFail();
});
});
})
401エラーが戻ってこないので、タイムアウトを追加しました。ステータスコード200および解析エラーがあってもエラー機能になるため、エラー内のステータス200を無視するようにしました。
OK、あなたはjsonpを使用しているように見えますが、jsonpの制限かもしれません。ご覧ください。
最後の投稿に解決策があるようです。お役に立てれば!