2016-12-30 89 views
0

我已經發布數據到我的MVC控制器沒有問題(使用ajax後和HttpPost)。爲什麼不提供任何參數

我遇到的問題是,它是異步的,我需要它發佈並等待響應。

因此,有get

然而,當我這樣做,從來就沒有傳遞參數。

我的JavaScript

//the type is "GET" 
function toDatabase(type, url, data, successDelegate, failDelegate, errorDelegate) { 
    $.ajax({ 
     type: type.toUpperCase(), 
     url: url, 
     contentType: "application/json;", 
     data: data, 
     dataType: "json", 
     success: function (response) { 
      successDelegate(response); removeSpinner(); 
     }, 
     failure: function (e) { 
      failDelegate(e.statusText); removeSpinner(); 
     }, 
     error: function (e) { 
      errorDelegate(e.statusText); removeSpinner(); 
     } 
    }) 
} 

和我的控制器是

[HttpGet] 
public JsonResult SaveNewStagePlan(string name) 
{ 
    //todo save 
    if (String.IsNullOrEmpty(name)) 
     return Json(new { id = -99 }); //always returns as name is null 
} 

我做了什麼錯?它在發佈(並使用HttpPost)時運行良好。

編輯

數據的值是{"name":"MyBand"},通過該傳遞JSON.stringify({ 'name': localVariableBandName })

+0

你的'toDatabase'方法'data'參數中傳遞的值是什麼? – Shyju

+0

@Shyju,我更新了我的帖子 – MyDaftQuestions

+0

你嘗試過跳過'stringify'步驟嗎?你沒有在url參數中發送json ...如果你沒有對它進行字符串化,那麼在GET請求中使用'data'屬性應該將url更改爲'url?name = MyBand'。 – ps2goat

回答

1

JSON.stringify該方法需要一個js對象,並返回該對象的字符串化版本另一個函數創建。例如,如果您將js對象{ name: 'shyju' }傳遞給此方法,您將獲得字符串{"name":"shyju"}

當ajax調用爲GET類型時,數據將作爲查詢字符串值發送。 $.ajax方法將根據需要將您在data屬性中傳遞的js對象轉換爲查詢字符串鍵值對併發送它。

所以基本上你當前的代碼發送查詢字符串這樣

Home/SaveNewStagePlan?{"name":"shyju"}` 

所以,你可以清楚地看到,這是不是一個有效的查詢字符串!理想情況下它應該是Home/SaveNewStagePlan?name=shyju

因此,解決方案是將js對象原樣傳遞給$.ajax調用(而不是對象的字符串化版本)。

這應該工作。

$.ajax({ 
    type: "GET", 
    url: url, 
    data: { name: 'shyju' }, 
    success: function(response) { 
     console.log(response); 
    }, 
    failure: function(e) { 
    }, 
    error: function(e) { 
    } 
}); 

既然是發送數據作爲查詢字符串,你並不需要指定contentType爲「應用JSON」(它仍然會使用它雖然)。

此外,沒有必要明確指定dataType作爲json,因爲您的代碼總是返回json數據。

另外,如果您的操作方法是GET操作方法,則需要明確指定要從中返回JSON數據。您可以使用Json方法的超載,該方法採用JsonRequestBehavior枚舉值。

return Json(new { id = -99 }, JsonRequestBehavior.AllowGet); 
+0

當我這樣做,它擊中我的控制器很好,但它總是返回到500狀態的錯誤代表... :( – MyDaftQuestions

+0

您需要修復您的服務器代碼。請參閱更新後的答案。 – Shyju

+0

OH CRUMBS ... I以前也使用過'allowget' :(謝謝(再次) – MyDaftQuestions

相關問題