我使用jQuery从视图发送到MVC后期操作
function DoSomething(passedId) {
$.ajax({
method: "POST",
dataType: 'text',
url: '/MyController/SomeAction/',
data: { id: passedId}
}).done(function (data) {
//
});
}
在MyController里面
[HttpPost]
public ActionResult SomeAction(int id)
{
...
}
在Firebug控制台中,我收到404错误。
答案 0 :(得分:3)
在RFC 2616中,代码404
表示服务器未找到与Request-URI匹配的任何内容。
所以你需要查看你的URL参数。 使用以下方法尝试MVC常规呼叫:
url: '@Url.Action("SomeAction", "MyController")',
答案 1 :(得分:3)
您没有说过您正在使用哪个版本的jquery。请检查jquery版本,如果此版本是< 1.9.0你应该而不是
method: "POST"
使用
type: "POST"
这是方法的别名,根据jquery official documentation,如果您使用1.9.0之前的jQuery版本,则应使用type。
function DoSomething(passedId) {
$.ajax({
type: "POST",
dataType: 'text',
url: '/MyController/SomeAction/',
data: { id: passedId}
}).done(function (data) {
...
});
}
经测试以上代码并且可以正常工作(每个请求都在mvc controller http post SomeAction action 中输入。)
答案 2 :(得分:1)
解决404问题:
有几个选项可以解决这个问题。您无法找到控制器/操作的描述方式。
- 如果您在控制器中的视图中,您尝试呼叫的操作位于该控制器中,则:
网址:' SomeAction',
- 例如,如果你试图从另一个控制器,OtherController调用一个动作,那么:
网址:'其他/ SomeAction',
- 要添加另一个答案,如果你在视图中调用你的ajax(而不是在javascript文件中)那么你也可以使用(对于名为SomeController的控制器):
网址:' @ Url.Action(" SomeAction","部分")',
其他注意事项:
您没有为json指定内容类型(contentType表示您要发送的内容):
contentType:" application / json;字符集= UTF-8",
我无法根据您的行动来判断您是否期待“
您需要对数据进行字符串化
JSON.stringify(data:{id:passedId}),
最后,我希望它看起来像: 函数DoSomething(passedId){
var url = "SomeAction"; //if action is in OtherController then: "Other/SomeAction"
$.ajax({
method: "POST",
url: url,
data: JSON.stringify({ id: passedId}),
contentType: "application/json; charset=utf-8"
}).done(function (data) {
//
});
}
答案 3 :(得分:0)
此处开头的斜线表示绝对路径,而不是相对路径。
/MyController/SomeAction/
您应该包含网址或相对路径..也许
'MyController/SomeAction/ajax.php'
或完整网址
'http://example.com/myajaxcontroller/someaction/ajax.php'
或从其他人那里偷来的回答
url: '@Url.Action("SomeAction", "MyController")',
为了解决这里的其他人,我不认为数据类型是 问题...... OP说"我收到404错误。"
contentType
是您要发送的数据类型,因此
应用/ JSON; charset = utf-8是一个常见的
应用程序/ x-WWW窗体-urlencoded; charset = UTF-8,即
默认强>
dataType
是您对服务器的期望:json,html,
文本等,jQuery将使用它来弄清楚如何填充成功函数的参数。
答案 4 :(得分:-1)
使用以下ajax call
var datum = { id: passedId };
$.ajax({
url: url, // your url
type: 'POST',
data: JSON.stringify(datum),
contentType: 'application/json; charset=utf-8',
beforeSend: function () {
},
complete: function () {
},
success: function (user, status, XHR) {
},
error: function (req, status, error) {
}
});
<强>更新强>
public ActionResult SomeAction(int id){}
应该接受string
参数而不是int
答案 5 :(得分:-1)
以这种方式编写代码:
function DoSomething(passedId) {
$.ajax({
url: 'yourController/SomeAction',
type: 'POST',
data: { id: passedId},
dataType: 'json',
error: function (ex) {alert(ex.responseText)},
success: function (data)
{
if (data.Results != null) {
//use the return values
});
}
}
});
}
和控制器
public JsonResult SomeAction(int id)
{
try
{
return Json(new { Results = "Text To return or send some object or an list, etc"}, JsonRequestBehavior.AllowGet);
}
catch (Exception)
{
throw;
}
}
最后,检查控制器是否有各自的视图。 :) 并且更新了“jQuery”库。 以防万一。