2012-03-19 38 views
7

我有以下的jQuery:jQuery AJAX返回200 OK狀態,但錯誤。我如何查看錯誤的細節?

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; 
} 
} 

AJAX響應200 OK,但success功能不是跑。相反,它似乎在運行error函數。

該腳本正在作爲ASP.NET ImageButton的單擊事件偵聽器運行。如果_IsValid==false,則調用e.preventDefault()以防止回發。

奇怪的是,如果我將事件偵聽器函數的結尾添加返回false,則此代碼將運行success函數。

我怎樣才能找出是什麼導致這種錯誤,以便我可以解決它?

回答

2

我認爲你目前遇到的問題是你的IsValid函數將始終返回true。這是因爲在函數返回之前,AJAX文章沒有時間完成。畢竟這是一個異步功能。

從我可以告訴你想要有效的表單與AJAX請求,如果有效提交表單,否則顯示一個彈出。如果這是正確的,你應該做類似...

$(".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

我怎樣才能找出是什麼導致這個錯誤,以便我可以解決它?

你可以使用你的瀏覽器中的JavaScript調試工具,比如Firefox中的Firebug,這將讓你看到的AJAX請求和響應。您將看到通過電線發送的確切內容以及任何可能的錯誤。

其實看這個:

dataType: 'json;' 

你可能是指:

dataType: 'json' 

當你明確地設置響應的內容類型是這樣,你應該確保服務器發送有效的JSON爲jQuery的將嘗試解析響應,如果失敗,您將得到一個異常。

而且我會完全取代:

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

有:

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

不要使用字符串連接像你構建JSON什麼時候。

+0

感謝您的回覆。我已經做出了您所推薦的更改,但仍然存在錯誤。此外,我試着在Google Chrome中調試javascript。 'xhr.ResponseText =「」'。你有什麼其他的建議? – Curt 2012-03-19 17:25:40

+0

我的建議是看網絡標籤,你看到的AJAX請求和響應。但在這種情況下,如果服務器發送了一個空的響應,並且您明確設置了'dataType:'json'',那麼,您知道,''''是無效的JSON。所以你可能會嘗試修復你的服務器來發送有效的JSON。 – 2012-03-19 17:26:19

+0

我也更新了一些關於應用 – Curt 2012-03-19 17:27:32