这很奇怪,我不知道为什么这不起作用,无论我做什么,我总是最终收到动作方法参数的null。为什么这不起作用?
<input type="button" value="Save" onclick="SaveDocument()" />
function SaveDocument() {
var data = "sss";
$.ajax({
url: "/Home/Save",
type: "POST",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(data),
success: function (mydata) {
alert("Saved");
},
error: function(error)
{
alert('failed');
alert(error);
}
});
}
</script>
[HttpPost]
public ActionResult Save(string data)
{
return null;
}
答案 0 :(得分:2)
我在本地创建了相同的测试代码。我得到的是null。您可以尝试使用以下代码。它对我有用。
function SaveDocument() {
$.ajax({
url: "/Home/Save",
type: "POST",
data: {"data" : "sss"},
success: function (mydata) {
alert("Saved");
},
error: function(error)
{
alert('failed');
alert(error);
}
});
}
答案 1 :(得分:0)
您应该将js对象(键值对)传递给JSON.stringify
方法,以便通过ajax调用发送字符串化的数据版本。键/对象属性名称应与操作方法参数名称匹配。
以下内容应该有效。
data: JSON.stringify({ data:"some string"}),
contentType: "application/json; charset=utf-8",
您可能还想在js方法中考虑return false;
,以便正常的表单提交不会发生。
此外,由于您的服务器操作方法正在返回null
,因此您不应指定&#34; json&#34;作为&#34; dataType
&#34;你的ajax调用的属性值。只需从您的ajax调用中删除该行。
或您可以从操作方法中返回一些有效的json数据,而不是null
[HttpPost]
public ActionResult Save(string data)
{
return Json(data);
}
答案 2 :(得分:0)
将操作参数名称更改为其他有意义的名称。 data是jQuery中的保留关键字。
Individual