为什么Ajax不发送数据?

时间:2017-07-16 19:40:32

标签: c# jquery ajax model-view-controller

如果输入变量(a)未设置为Null,则以下Ajax代码甚至不会触发我的操作。

Ajax代码:

var ab = "Chocolate Smoothies ya know?";

$("#customerSubmit").submit(function (e) {

    e.preventDefault();

    $.ajax({
        url: "/api/Booking/lander",
        method: "post",
        data: { a: ab }
    })
});

以下我的控制器代码:

[HttpPost]
public void lander(string a)
{
    System.Diagnostics.Debug.WriteLine(a);
}

当我没有将它设置为null时,收到的输入为空。

触发断点时的

屏幕截图:

enter image description here

我使用了类型/方法/等等。似乎没有什么工作

更新

我甚至尝试了以下但没有用:

更新2:

即使以下情况也不起作用,以下其中一项也给了我 - > “无法加载资源:服务器响应状态为405(方法不允许)”

var ab = 'Chocolate Smoothies ya Know?';
$.ajax({
    url:"/api/Booking/lander", 
    data: {'': ab}
});

使用

public string lander([FromUri]string asx) ////and asx = "" and /// asx = null

enter image description here

enter image description here

更新3

发生了一些非常奇怪的事情,我使用了以下代码:

enter image description here enter image description here

我收到以下错误:

enter image description here

当我用

  

////(字符串a =“”)

由于某种未知原因引发了我的行动,发生了以下情况。

enter image description here

以下是我的WebApiConfig代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;

namespace HotelManagementSystem
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            config.MapHttpAttributeRoutes();

            //routes.MapHttpRoute("RestApiRoute", "Api/{controller}/{id}", new { id = RouteParameter.Optional }, new { id = @"\d+" }); //this replaces your current api route


            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
}

更新4:

即使以下设置也不起作用:

enter image description here

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:0)

您需要将contentTypestringify设置为要发送给控制器的数据。因此,您要发送的数据将是:

var postData = JSON.stringify({'a':ab});

因此生成的代码应如下所示:

var ab = 'Chocolate Smoothies ya Know?';
var postData = JSON.stringify({'a':ab});
$.ajax({
    url: "/api/Booking/lander", 
    method: "POST",
    contentType: "application/json",
    data: postData
});

您也可以选择设置dataType: "json"。您无需在a方法中为lander参数指定任何查找位置(uri,body)。

答案 1 :(得分:0)

您在RouteConfig.cs文件中定义了默认路由

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            namespaces: new [] { "YourNameSpace.Controllers" }
        );

如果你改变" a"在你的签名中" id"并发送" id"通过你的ajax你会成功,但如果你想在post方法中有多个参数或不同的命名尝试定义新的路由。