2012-03-19 35 views
7

Tôi có jQuery sau:jQuery AJAX trả về 200 trạng thái OK, nhưng lỗi. Làm thế nào tôi có thể xem chi tiết lỗi?

var fn = { 
    Load: function() { 
     $(".myclass input.Submit").click(function (e) { 
      var _IsValid = fn.IsValid(); 
      if (_IsValid == false) { 
       e.preventDefault(); 
      } 
      //Popup displays message fine if "return false;" is 
      //called here but then obviously never posts back. 
     }); 
    } 
, IsValid: function() { 

    var _IsValid = true; 
$.ajax({ 
     url: "/myURL" 
     , type: 'POST' 
     , contentType: 'application/json; charset=utf-8' 
     , data: JSON.stringify({ Barcode: $barcode.val(), Email: $email.val() }) 
     , dataType: 'json' 
     , success: function (data) { 
      var array = eval(data); 
      if (array[0] == 0) { 
      _IsValid = false; 
      ShowPopup(array[1]); 
      } 
     } 
     , error: function (xhr, status, error) { 

     } 
    }); 
    return _IsValid; 
} 
} 

phản ứng AJAX là 200 OK, nhưng success hàm được không phải là ran. Thay vào đó có vẻ như nó đang chạy hàm error.

Tập lệnh đang được chạy dưới dạng trình xử lý sự kiện nhấp chuột cho ASP.NET ImageButton. Nếu _IsValid==false, thì e.preventDefault() được gọi để ngăn việc đăng lại.

Điều kỳ lạ là nếu tôi thêm trả về false vào cuối chức năng nghe sự kiện của tôi, mã này chạy hàm success.

Làm cách nào để tìm hiểu nguyên nhân gây ra lỗi này để tôi có thể giải quyết vấn đề này?

Trả lời

2

Tôi nghĩ rằng sự cố bạn hiện có là chức năng IsValid của bạn sẽ luôn trả về true. Điều này là do bài viết AJAX sẽ không có thời gian để hoàn thành trước khi hàm được trả về. Nó là một hàm không đồng bộ sau khi tất cả.

Từ những gì tôi có thể nói bạn muốn hợp lệ biểu mẫu có yêu cầu AJAX và nếu hợp lệ gửi biểu mẫu, nếu không hiển thị cửa sổ bật lên. Nếu đúng, bạn nên làm điều gì đó như ...

$(".myclass input.Submit").click(function (e) { 
    e.preventDefault(); 
    ProcessForm(); 
}); 

function ProcessForm(){ 
    $.ajax({ 
     url: "/myURL" 
     , type: 'POST' 
     , contentType: 'application/json; charset=utf-8' 
     , data: JSON.stringify({ Barcode: $barcode.val(), Email: $email.val() }) 
     , dataType: 'json' 
     , success: function (data) { 
      var array = eval(data); 
      if (array[0] == 0) { 
      ShowPopup(array[1]); 
      } 
      else//VALID 
      { 
      document.forms[0].submit(); 
      //OR IF YOU HAVE MULTIPLE FORMS SPECIFY AN ID... 
      document.getElementById("FormElement").submit(); 
      } 
     } 
     , error: function (xhr, status, error) { 

     } 
    }); 
} 
2

Làm cách nào để tìm hiểu nguyên nhân gây ra lỗi này để tôi có thể giải quyết vấn đề này?

Bạn có thể sử dụng công cụ gỡ lỗi javascript trong trình duyệt của mình như FireBug trong FireFox sẽ cho phép bạn xem yêu cầu và phản hồi AJAX. Bạn sẽ thấy chính xác những gì được gửi qua dây và bất kỳ lỗi nào có thể xảy ra.

Trong thực tế nhìn vào này:

dataType: 'json;' 

bạn có thể có nghĩa là:

dataType: 'json' 

Khi bạn thiết lập một cách rõ ràng các loại nội dung câu trả lời như thế này bạn nên chắc chắn rằng máy chủ gửi hợp lệ JSON như jQuery sẽ cố gắng phân tích cú pháp phản hồi và nếu nó không thành công, bạn sẽ nhận được một ngoại lệ.

Ngoài ra tôi hoàn toàn có thể thay thế:

data: '{"Barcode":"' + $barcode.val() + '", "Email":"' + $email.val() + '"}' 

với:

data: JSON.stringify({ Barcode: $barcode.val(), Email: $email.val() }) 

bao giờ sử dụng concatenations chuỗi giống như bạn đã làm khi xây dựng JSON.

+0

Cảm ơn câu trả lời của bạn. Tôi đã thực hiện các thay đổi bạn đã đề xuất và lỗi của nó vẫn bị lỗi. Hơn nữa, tôi đã thử gỡ lỗi javascript trong Google Chrome. 'xhr.ResponseText =" "'. Bạn có bất cứ lời đề nghị khác? – Curt

+0

Đề xuất của tôi là xem tab Mạng nơi bạn thấy các yêu cầu và phản hồi AJAX. Nhưng trong trường hợp này nếu máy chủ gửi một phản hồi trống và bạn đặt rõ ràng 'dataType: 'json'', thì, bạn biết đấy,'' ''là một JSON không hợp lệ. Vì vậy, bạn có thể cố gắng sửa chữa máy chủ của mình để gửi JSON hợp lệ. –

+0

Tôi cũng đã cập nhật câu hỏi của mình với một chút thông tin về máy chủ ứng dụng – Curt

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