2015-05-23 92 views
1

我有一個像下面獲取數據 - Asp.net MVC

$.ajax({ 
      type: "POST", 
      url: "Main/receive", // the method we are calling 
      contentType: "application/json; charset=utf-8", 
      data: JSON.stringify({ 'p':$("#txtname").val() }), 
      dataType: "json", 
      success: function (result) { 
       alert('Yay! It worked!'); 
       // Or if you are returning something 

      }, 
      error: function (result) { 
       alert('Oh no zzzz:('+result.responseText); 
      } 
     }); 

而且我打電話給控制器的操作方法jquery的AJAX腳本。數據正在發送到控制器的操作方法,我也正在接收來自控制器的數據。但是我收到的數據是在jquery ajax的錯誤函數裏面。

我希望它在成功函數中。

爲什麼我的成功功能沒有被調用。

以下是我的控制器的操作方法,

[HttpPost] 
    public string receive(string p) 
    { 
     ViewBag.name = p; 
     return p; 

    } 
+1

因爲您已指定返回類型爲json(即'dataType:「json」,')。將服務器方法更改爲'return Json(p);'但是代碼中存在很多或其他潛在的錯誤,所以我稍後會發佈一個答案。 –

+0

@StephenMuecke謝謝,請不要忘記發佈回答 – Alex

回答

1

原因因爲錯誤是你已經指定返回的數據類型是json(在行dataType: "json",)但您的方法返回文本。你有2個選項。

  1. 改變控制器方法使用return Json(p);
  2. 更改AJAX選項dataType: "text",返回JSON或只是忽略它

但是可以提高你的腳本如下

$.ajax({ 
    type: "POST", 
    url: '@Url.Action("receive", "Main")', // don't hardcode url's 
    data: { p: $("#txtname").val() }, // no need to stringify (delete the contentType: option) 
    dataType: "json", 
    success: function (result) { 
     alert('Yay! It worked!'); 
    }, 
    error: function (result) { 
     alert('Oh no zzzz:('+result.responseText); 
    } 
}); 

注意或更簡單

$.post('@Url.Action("receive", "Main")', { p: $("#txtname").val() }, function(result) { 
    alert('Yay! It worked!'); 
}).fail(function(result) { 
    alert('Oh no zzzz:('+result.responseText); 
}); 

注:應始終使用@Url.Action()生成正確的URL,這是不是在這種情況下字符串化必要的數據(但你需要刪除contentType:線,因此使用默認application/x-www-form-urlencoded; charset=UTF-8

在此外,這不是一個嚴格的POST(你沒有改變服務器上的數據 - 但我認爲這只是測試)。 ViewBag.name = p;這一行沒有任何意義 - 它在你的上下文中沒有任何意義,只要你從方法中返回,ViewBag就會丟失。

+0

我在'error'行有錯字 - 請參閱編輯,但是錯誤沒有意義(我在我的項目中測試了代碼並且工作正常)。我會看看,如果我可以找到有關該錯誤的信息 –

+0

它的工作。謝謝 – Alex

+0

我問了一個新問題。你可以請檢查嗎?http://stackoverflow.com/questions/30420765/asp-net-mvc-model-example-is-correct-or-incorrect – Alex

0

嘗試改變控制器代碼如下

[HttpPost] 
public ActionResult List(string p) 
    { 
     ViewBag.name = p; 
     return Json(ViewBag); 
    } 
+0

它給錯誤。不能將p字符串轉換爲類型對象 – Alex

0

你的控制器方法應該是這樣的:

[HttpPost] 
public ActionResult receive(string p) 
{ 
    return Json(p); 
} 
相關問題