2012-04-22 59 views
19

Tôi đang gọi trang web của bên thứ ba bằng cách sử dụng jQuery ajax. Theo trang của họ, họ đã gửi cho tôi mã trạng thái 200 nếu đăng nhập thành công và 401 nếu đăng nhập không thành công. Đây là mẫu mã jquery của tôi. Mã này hoạt động tốt trên IE nhưng không hoạt động trên Chrome hoặc Firefox. Điều gì có thể là vấn đề?Xử lý jQuery ajax 401 Không được phép

$.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 
}); 

Tôi đã thử tất cả các lỗi chức năng, thành công, đầy đủ và trạng thái Mã. Không ai trong số họ xử lý lỗi 401.

+1

là yêu cầu/phản hồi ok trên firebug? – skafandri

+0

Dữ liệu được gửi trên IE & Chrome ('console.log' chúng) là gì? Bạn không có nhiều phần tử với ID 'inp_user_name' hoặc' inp_user_pwd'? Thử thêm tùy chọn 'cache: false'. Ngoài ra, bạn có thể xóa dấu ngoặc đơn trên dòng 'dữ liệu: ([...])'. Ngoài ra, bạn có sử dụng mã HTML không? Loại phần tử nào là "inp_user_xxx"? – pomeh

+0

Không. Mọi thứ hoạt động tốt với yêu cầu. Không có vấn đề với mã trạng thái 200 khi tôi chuyển đúng mật khẩu. Và nó nhận được mã phản hồi 401 khi tôi gửi sai mật khẩu. Tôi muốn bắt nó khi nó là 401. Nhưng không có chức năng nào hỗ trợ điều đó. Tôi đã thử tất cả các lỗi chức năng, thành công, hoàn thành và mã trạng thái. Yêu cầu của tôi là bắt lỗi 401. Không dừng lại. –

Trả lời

10

Tôi có thể sửa lỗi như dưới đây.

$(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(); 
      }); 
     }); 
    }) 

Điều tôi đã làm đã hết thời gian chờ vì lỗi 401 không bao giờ quay lại. Kể từ khi nó đi đến chức năng lỗi ngay cả với mã trạng thái 200 và lỗi phân tích cú pháp tôi đã làm cho nó bỏ qua tình trạng 200 bên trong lỗi.

Các vấn đề liên quan