我正在使用Ajax(和jQuery UI),当我按下对话框上的按钮时,我会在控制器中触发以下操作:
[HttpPost]
public JsonResult DeletePost(int adrId)
{
return Json("Hello World Json!", JsonRequestBehavior.DenyGet);
}
我的JQuery代码如下所示:
<script type="text/javascript">
$(document).ready(function () {
$("#dialog").dialog(
{
buttons: {
"Ok": function () {
$.ajax({
url: '/Home/DeletePost',
type: 'POST',
data: { adrId: 6 },
dataType: 'json',
contentType: 'application/json; charset=utf-8',
error: function (xhr) {
alert('Error: ' + xhr.statusText);
},
success: function (result) {
CheckIfInvoiceFound(result);
},
async: true,
processData: false
});
$(this).dialog("close");
}
}
});
jQuery('.delete').click(function () {
})
})</script>
然而,当我向服务器发帖时,我收到“错误:未找到”
答案 0 :(得分:0)
试试这个:
<script type="text/javascript">
$(document).ready(function () {
$("#dialog").dialog(
{
buttons: {
"Ok": function () {
$.ajax({
...
data: JSON.stringify({ adrId: 6 }),
...
});
$(this).dialog("close");
}
}
});
jQuery('.delete').click(function () {
})
})</script>
答案 1 :(得分:0)
问题在于您的data
参数不是有效的JSON有效负载。
它不是有效的JSON,因为jQuery在内部使用jQuery.param()
方法为典型的POST提交准备请求参数,并且它将转换为以下字符串:
adrId=6
但是,服务器需要JSON有效负载,而您指定的内容显然不是JSON有效负载。有效的JSON有效负载是:
{ 'adrId': 6 }
在data参数中发送正确的JSON的一种方法是重构你的jQuery AJAX,如下所示:
$.ajax({
url: '/Home/DeletePost',
type: 'POST',
data: "{ 'adrId': 6 }",
dataType: 'json',
contentType: 'application/json; charset=utf-8',
error: function (xhr) {
alert('Error: ' + xhr.statusText);
},
success: function (result) {
alert("success");
},
async: true,
processData: false
});
或者您可以按照其他人的建议使用JSON.stringify。
另一种方法是将您的数据作为默认值'application/x-www-form-urlencoded; charset=UTF-8'
发送,这样您就不必更改数据参数。代码将大大简化:
$.ajax({
url: '/Home/DeletePost',
type: 'POST',
data: { adrId: 6 },
error: function (xhr) {
alert('Error: ' + xhr.statusText);
},
success: function (result) {
alert("success");
},
async: true
});
JQuery会认识到结果是有效的JSON。