为什么Ajax不发送数据?
如果输入变量(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时,收到的输入为空。
触发断点时的屏幕截图:
我已经使用了类型/方法/等等。似乎没什么用
更新:
我甚至尝试了以下但没有用:
更新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
更新3
发生了一些非常奇怪的事情,我使用了以下代码:
我收到以下错误:
当我用的时候
////(字符串a =“”)
它因某种未知原因触发了我的行动,发生了以下情况。
以下是我的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:
即使以下设置也不起作用:
您需要设置contentType
并将要发送到控制器的数据stringify
。 所以您要发送的数据将是:
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"
。 您不需要为lander
方法中a
参数指定任何查找位置(uri,body)。
您有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”并通过ajax发送“id”,您将成功,但如果您希望在post方法中使用多个参数或不同的命名,请尝试定义新路由。