25

jQueryajaxを使用してサードパーティの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
});

エラー、成功、完了、およびstatusCodeのすべての関数を試しました。それらのどれも401エラーを処理しません。

4

2 に答える 2

11

以下のように修正できます。

$(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を無視するようにしました。

于 2012-04-23T01:21:30.617 に答える
3

わかりました。jsonpを使用しているようですが、jsonpの制限である可能性があります。見てください。

http://forum.jquery.com/topic/jquery-ajax-with-datatype-jsonp-will-not-use-error-callback-if-request-fails

最後の投稿に解決策があるようです。お役に立てれば!

于 2012-04-22T12:36:36.000 に答える