2010-01-04 35 views
28

Tôi đang chuyển hai tham số chuỗi từ cuộc gọi jQuery ajax đến phương thức điều khiển MVC, mong đợi một phản hồi json quay lại. Tôi có thể thấy rằng các tham số được điền ở phía máy khách nhưng các tham số khớp nhau ở phía máy chủ là null.jquery Cuộc gọi Ajax - các thông số dữ liệu không được chuyển đến hành động của Bộ điều khiển MVC

Đây là javascript:

$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: "List/AddItem", 
    data: "{ ListID: '1', ItemName: 'test' }", 
    dataType: "json", 
    success: function(response) { alert("item added"); }, 
    error: function(xhr, ajaxOptions, thrownError) { alert(xhr.responseText); } 
}); 

Dưới đây là phương pháp điều khiển:

Function AddItem(ByVal ListID As String, ByVal ItemName As String) As JsonResult 
    'code removed for brevity 
    'ListID is nothing and ItemName is nothing upon arrival. 
    return nothing 
End Function 

Tôi đang làm gì sai?

+6

nên không đó là 'data: {ListID: '1', ITEMNAME: 'test'}, '? Không có dấu nháy kép. – LukLed

+0

LukeLed là đúng: bạn đang đi qua một chuỗi thay vì một đối tượng. Hủy bỏ các dấu ngoặc kép và bạn sẽ được tốt. – pixeline

+0

Cảm ơn bạn đã trả lời. Tôi đã thử loại bỏ các dấu ngoặc kép và nhận được kết quả tương tự. – Grant

Trả lời

30

tôi đã cố gắng:

<input id="btnTest" type="button" value="button" /> 

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#btnTest').click(function() { 
     $.ajax({ 
      type: "POST", 
      url: "/Login/Test", 
      data: { ListID: '1', ItemName: 'test' }, 
      dataType: "json", 
      success: function(response) { alert(response); }, 
      error: function(xhr, ajaxOptions, thrownError) { alert(xhr.responseText); } 
     }); 
     }); 
    }); 
</script> 

và C#:

[HttpPost] 
public ActionResult Test(string ListID, string ItemName) 
{ 
    return Content(ListID + " " + ItemName); 
} 

Nó làm việc. Xóa contentType và đặt data mà không có dấu ngoặc kép.

+0

Cảm ơn bạn đã trả lời. Tôi đã thử điều này và nhận được kết quả tương tự. Có thể có một cái gì đó trong tập tin web.config của tôi mà không được thiết lập chính xác hoặc một cái gì đó? – Grant

+1

@Grant: Bạn đã xóa 'contentType' chưa? Với 'contentType' nó không hoạt động. – LukLed

+0

Tôi đã xóa contentType và dấu ngoặc kép khỏi tham số dữ liệu. Không may mắn. – Grant

1

Nếu bạn gặp rắc rối với bộ nhớ đệm ajax bạn có thể tắt nó đi:

$.ajaxSetup({cache: false}); 
+0

Tôi cũng có cùng một vấn đề. Tại sao bộ nhớ cache rõ ràng? những gì nó có hiệu lực? & nơi để viết nó, nó sẽ bên trong '$ (document) .function() {}'. – MegaBytes

+0

nếu asp.net mvc, bạn có thể tắt nó trong một bt của javascript bằng cách sử dụng một trang bố trí, sau đó tất cả các trang sẽ có bộ nhớ đệm ajax của họ tắt. vấn đề duy nhất với điều này giống như tôi đã nói nó tắt nó cho tất cả các cuộc gọi ajax. thay vào đó bạn có thể chỉ định thông thường nếu bạn muốn các cuộc gọi ajax riêng lẻ được lưu trong bộ nhớ cache hay không. những gì nó thường làm là thêm ngày/giờ vào cuối url yêu cầu ajax để trình duyệt/máy chủ bị lừa khi nghĩ rằng đó là yêu cầu mới mỗi lần – Mocksy

0

Trong trường hợp của tôi, nếu tôi loại bỏ các các contentType, tôi nhận được Lỗi máy chủ nội bộ.

Đây là những gì tôi đã làm việc sau nhiều lần cố gắng:

var request = $.ajax({ 
    type: 'POST', 
    url: '/ControllerName/ActionName' , 
    contentType: 'application/json; charset=utf-8', 
    data: JSON.stringify({ projId: 1, userId:1 }), //hard-coded value used for simplicity 
    dataType: 'json' 
}); 

request.done(function(msg) { 
    alert(msg); 
}); 

request.fail(function (jqXHR, textStatus, errorThrown) { 
    alert("Request failed: " + jqXHR.responseStart +"-" + textStatus + "-" + errorThrown); 
}); 

Và đây là các mã điều khiển:

public JsonResult ActionName(int projId, int userId) 
{ 
    var obj = new ClassName(); 

    var result = obj.MethodName(projId, userId); // variable used for readability 
    return Json(result, JsonRequestBehavior.AllowGet); 
} 

Xin lưu ý, trường hợp của ASP.NET là đôi chút khác biệt, chúng tôi có để áp dụng JSON.stringify() cho dữ liệu như được đề cập trong update của câu trả lời này.

+0

http://stackoverflow.com/questions/26605065/jquery-ajax -trả thành công-lỗi-từ-mvc-net-controller –

1

Bạn cần thêm -> contentType: "application/json; charset = utf-8",

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#btnTest').click(function() { 
     $.ajax({ 
      type: "POST", 
      url: "/Login/Test", 
      data: { ListID: '1', ItemName: 'test' }, 
      dataType: "json", 
      contentType: "application/json; charset=utf-8", 
      success: function(response) { alert(response); }, 
      error: function(xhr, ajaxOptions, thrownError) { alert(xhr.responseText); } 
     }); 
     }); 
    }); 
</script> 
Các vấn đề liên quan