2013-06-22 84 views
-1

我想將一些數據發佈到我的ASP.Net MVC Web API控制器並嘗試將其返回到響應中。我對崗位下面的腳本:如何在jQuery中處理POST請求的響應

$('#recordUser').click(function() { 
    $.ajax({ 
    type: 'POST', 
    url: 'api/RecordUser', 
    data: $("#recordUserForm").serialize(), 
    dataType: 'json', 
    success: function (useremail) { 
     console.log(useremail); 
    }, 
    error: function (xhr, status, err) { 

    }, 
    complete: function (xhr, status) { 
     if (status === 'error' || !xhr.responseText) { 
      alert("Error"); 
     } 
     else { 
      var data = xhr.responseText; 
      alert(data); 
      //... 
     } 
    } 
}); 
}); 

與該腳本的問題是,每當我試圖發佈數據,jQuery的回來的「錯誤」,而不是「成功」。

我確定我的控制器沒有問題。無論何時發出請求,我都可以在調試模式下進入我的api方法,並且可以看到它從POST請求獲取數據並將其返回。這個控制器很簡單:

public class RecordUserController : ApiController 
{ 
    public RecordUserEmailDTO Post(RecordUserEmailDTO userEmail) 
    { 
     return userEmail; 
    } 
} 

我不知道如何讓jQuery打印出任何有用的錯誤消息。目前,當我嘗試使用Chrome控制檯調試jQuery代碼時,它顯示一個空的xhr.responseText,「err」對象和「status」中的任何內容都設置爲「error」,正如您所看到的那樣並不是很有幫助。我曾嘗試

一件事是直接從控制檯運行下面的代碼:

$.ajax({ 
    type: 'POST', 
    url: 'api/RecordUser', 
    data: {"Email":"[email protected]"}, 
    dataType: 'json', 
    success: function (useremail) { 
     console.log(useremail); 
    }, 
    error: function (xhr, status, err) { 
     console.log(xhr); 
     console.log(err); 
     console.log(status); 
     alert(err.Message); 
    }, 
    complete: function (xhr, status) { 
     if (status === 'error' || !xhr.responseText) { 
      alert("Error"); 
     } 
     else { 
      var data = xhr.responseText; 
      alert(data); 
     } 
    } 
}); 

即使用沒有實際點擊按鈕,提交表單相同的腳本。令人驚訝的是,這回來了正確的響應,我可以看到我的數據打印出來在控制檯。對我而言,這至少意味着我的Web API控制器工作正常,但讓我不知道爲什麼它不能單擊按鈕或提交表單並進入「錯誤」而不是「成功」。

我在我的方法中找不到任何錯誤,如果有人可以幫助我在發佈表單時獲得回覆,我會很高興。

+3

你爲什麼使用'complete'回調?這是用於成功_and_錯誤。在任何情況下(沒有雙關語意圖),最好使用延遲的'.done','.fail'和'.always'。 – Alnitak

+0

你也可以嘗試使用$ .post() - 這是一個簡寫方法$ .ajax ()專門用於發佈後操作。 –

+0

@Alnitak,很好。我只是刪除完整的回調,我的代碼現在正在工作。雖然我記得之前在閱讀關於嘗試打印出錯消息的一些答案之後完成整個工作之前,它並沒有工作。但我想我並沒有正確地調用成功,因爲我沒有爭論就稱之爲成功 - 並不確定是因爲原因還是其他原因。感謝您查看這個。 :) – sttaq

回答

-1

正如Alnitak所建議的那樣,我使用complete回調以及successerror。從我的代碼中刪除complete解決了問題。

感謝Alnitak。