Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 转换JQuery-ajax-GET-to-POST_Javascript_Jquery_Ajax_Asp.net Mvc_Razor - Fatal编程技术网

Javascript 转换JQuery-ajax-GET-to-POST

Javascript 转换JQuery-ajax-GET-to-POST,javascript,jquery,ajax,asp.net-mvc,razor,Javascript,Jquery,Ajax,Asp.net Mvc,Razor,我在应用程序的索引剃刀上有一个jquery ajax get方法: $.ajax({ url: "@Url.Action("SubmitProjectForPreapproval", "api/Project")", type: "GET", cache: false, data: { projectId: "@ViewContext.RouteData.Values["ProjectId"]" } }).done(function (data) { v

我在应用程序的索引剃刀上有一个jquery ajax get方法:

$.ajax({
    url: "@Url.Action("SubmitProjectForPreapproval", "api/Project")",
    type: "GET",
    cache: false,
    data: { projectId: "@ViewContext.RouteData.Values["ProjectId"]" }
}).done(function (data) {

    var count = 0;
    $.each(data, function (index, value) {
        $("#ulMessages").append("<li>" + value + "</li>");
        count++;
    });

    // Assume validation errors if more than 1 message
    if (count > 1) {
        $("#btnSubmit").removeAttr("disabled");
    }

}).fail(function () {

    $("#ulMessages").append("<li>An error occurred. Please try again later</li>");
    $("#btnSubmit").removeAttr("disabled");

}).always(function () {

    $("#imgAjaxLoader").hide();

});

不确定如果我在那里有参数,为什么它找不到我的方法。

我不确定@Url内容如何与您的系统一起格式化-但只是将其更改为类似以下内容:

$.ajax({
url:“@url.Action”(“提交项目进行预批准”,“api/Project”)”,
类型:“POST”,
cache:false,
数据:{projectId:@ViewContext.RouteData.Values[“projectId”]“}
}).done(函数(数据){

如果你被咬了:

@Url.Action(“SubmitProjectForPreapproval


…实际上有任何?xxx值,您还需要将它们添加到
数据中:{…}

问题确实是我将数据发送到控制器操作的方式。我通过执行以下操作修复了它:

  • 更改ajax方法(使用JSON.stringify):

  • 添加一个类以获取此字符串化值:

  • 更改控制器操作方法以接收此新对象并提取所需的值:

[HttpPost]
预批准的公共列表提交项目(ProjectDobject ProjectDobject)
{
int projectId=int.Parse(projectdobject.projectId);
...
}

为什么不在ajax中将
类型更改为
POST
GET
call@dreamweiver:是的。这正是我想做的。我用上面的GET发布了工作版本。Andrew在这里是正确的,或者你也可以使用$.post方法,它是$.ajax type:post方法的缩写。基本上如果类型未指定ajax将使用GET so specify type:“POST”作为参数我已经发现使用Fiddler来发现实际的错误:我可能没有正确地传递路由值。它说“在与请求匹配的控制器
项目
上找不到任何操作”。“如果我从控制器中的方法中取出参数,它将查找操作。例如:
public List SubmitProjectForPreapproval()
[HttpGet]
public List<string> SubmitProjectForPreapproval(int projectId)
{ ... }
public List<string> SubmitProjectForPreapproval(/*int projectId*/)
{
    int projectId = 3308;
    ...
}
var projectIdObject = {
    ProjectId: "@ViewContext.RouteData.Values["ProjectId"]",
}

$.ajax({
    url: "@Url.Action("SubmitProjectForPreapproval", "api/Project")",
        type: "POST",
        cache: false,
        data: JSON.stringify(projectIdObject),
        contentType: 'application/json',
    }).done(function (data) { ... }
public class ProjectIdObject
{
    public string ProjectId { get; set; }
}
[HttpPost]
public List<string> SubmitProjectForPreapproval(ProjectIdObject projectIdObject)
{
    int projectId = int.Parse(projectIdObject.ProjectId);
    ...
}