2013-12-22 81 views
0

我有這樣的ajax:從JS將數據發送到控制器

function sendData() { 
    var question = (document.getElementById('question').value).toString(); 
    var c = (document.getElementById('c').value).toString(); 
    $.ajax({ 
     url: '/Home/InsertData', 
     type: 'POST', 
     data: {question:question, c:c}, 
     // data: {}, 
     dataType: 'json', 
     contentType: 'application/json; charset=utf-8', 
     success: function() { 
      alert('suc'); 
     }, 
     error: function (error) { 
      alert('error'); 
     } 
    }); 
} 
在我 HomeController

,我具備的功能:

[HttpPost] 
public void InsertData(string question, string c) 
//public void InsertData() 
{ 
    this.insertDataToCustomers(question, c); 

} 

當我運行它,我得到了一個錯誤:

POST http://localhost:2124/Home/InsertData 500 (Internal Server Error) 

如果我在InsertData函數中沒有要求輸入值並且沒有在ajax中發送數據,那麼我RKS。爲什麼我不能發送數據到InsertData函數?

p.s.有值questionc

謝謝!

回答

2

刪除此:

contentType: 'application/json; charset=utf-8', 

您還沒有發送任何JSON到服務器,所以這是要求一個不正確的內容類型。您正在發送application/x-www-form-urlencoded請求。

所以:

function sendData() { 
    var question = $('#question').val(); 
    var c = $('#c').val(); 
    $.ajax({ 
     url: '/Home/InsertData', 
     type: 'POST', 
     data: { question: question, c: c }, 
     success: function() { 
      alert('suc'); 
     }, 
     error: function (error) { 
      alert('error'); 
     } 
    }); 
} 

與您的代碼的另一個問題是,你表示dataType: 'json'這意味着你希望服務器返回JSON,但你的控制器操作不會返回任何東西。這只是一個無效的方法。在ASP.NET MVC控制器中,動作應該返回ActionResults。所以,如果你想返回一些JSON例如指示操作的狀態,你可以有這樣的:

[HttpPost] 
public ActionResult InsertData(string question, string c) 
{ 
    this.insertDataToCustomers(question, c); 
    return Json(new { success = true }); 
} 

當然,你可以返回,這將是JSON序列化的任意對象,你將能夠訪問它在你的success AJAX回調中。

相關問題