将复杂类型作为数据传递给 jquery ajax post

Posted

技术标签:

【中文标题】将复杂类型作为数据传递给 jquery ajax post【英文标题】:passing complex type as data to jquery ajax post 【发布时间】:2011-07-10 14:15:43 【问题描述】:

我的数据模型类如下所示:

[数据合约] 公共课秩序 [数据成员] 公共字符串 ID 获取;放; [数据成员] 公共字符串 AdditionalInstructions 获取;放; [数据成员] 公共双总金额获取;放; [数据成员] 公共日期时间 OrderDate 获取;放; [数据成员] 公共客户客户得到;放; [数据成员] public OrderedProduct OrderedProduct get;放; [数据合约] 公共类 OrderedProduct [数据成员] 公共 int ID 获取;放; [数据成员] 公共字符串名称 获取;放; [数据成员] 公共双价格得到;放; [数据成员] 公共 int 数量 获取;放; [数据合约] 公共类客户 [数据成员] 公共字符串名字 获取;放; [数据成员] 公共字符串姓氏得到;放;

我的 WCF 操作合同是:

[WebInvoke(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)] [运营合同] 字符串 SaveOrder(Order order);

我的 ajax 调用如下所示:

函数 SaveOrder() var orderJson = 附加说明:$("span:first").text(), 客户:名:$("#firstName").val(),姓:$("#lastName").val(), OrderedProduct: ID: $("#productList").val(), 数量: $("#quantity").val() ; // 发布到您的网络服务或页面 $.ajax( type: "POST", //GET 或 POST 或 PUT 或 DELETE 动词 url: "http://localhost:14805/OrderService.svc/SaveOrder", // 服务的位置 data: orderJson, //发送到服务器的数据 contentType: "application/json; charset=utf-8", // 发送到服务器的内容类型 dataType: "json", //来自服务器的预期数据格式 processdata: false, //真或假 success: function (result) //成功的服务调用 警报(结果); , error: function (result) // 当Service调用失败时 alert('服务调用失败:' + result.status + ' ' + result.statusText); );

但是当我拨打这个电话时,我得到一个 400: bad request status。这是 Google Chrome 中的标题:

请求网址:http://localhost:14805/OrderService.svc/SaveOrder 请求方法:POST 状态码:400 错误请求 请求标头 接受:应用程序/json、文本/javascript、*/*; q=0.01 接受字符集:ISO-8859-1,utf-8;q=0.7,*;q=0.3 接受编码:gzip、deflate、sdch 接受语言:en-US,en;q=0.8 连接:保持活动 内容长度:165 内容类型:应用程序/json;字符集=UTF-8 主机:本地主机:14805 来源:http://localhost:14805 参考:http://localhost:14805/index.html 用户代理:Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.127 Safari/534.16 X-Requested-With:XMLHttpRequest 请求有效载荷 AdditionalInstructions=dbl-click+here+to+add+notes!&Customer%5BFirstName%5D=asdf&Customer%5BLastName%5D=fdsa&OrderedProduct%5BId%5D=3&OrderedProduct%5BQuantity%5D=12 响应标头 缓存控制:私有 连接:关闭 内容长度:1647 内容类型:文本/html 日期:2011 年 3 月 7 日星期一 19:14:57 GMT 服务器:ASP.NET开发服务器/10.0.0.0 X-AspNet-版本:4.0.30319

请告诉我如何解决这个问题。

谢谢, 阿伦

【问题讨论】:

请注意:您的 JSON 无效。您还希望将命名数组传递到 WCF 框架中(因此将整个事物包装在 'Order':... 【参考方案1】:

解决这个问题有两个问题。 1.我的服务本身存在一些错误(这是我的错) 2.我对orderJson对象做了JSON.stringify()。

函数 SaveOrder() var orderJson = 附加说明:$("span:first").text(), 顾客: 名字:$("#firstName").val(), 姓氏:$("#lastName").val() , 订购产品: 编号:$("#productList").val(), 数量:$("#quantity").val() ; // 发布到您的网络服务或页面 $.ajax( type: "POST", //GET 或 POST 或 PUT 或 DELETE 动词 url: "http://localhost:14805/OrderService.svc/SaveOrder", // 服务的位置 data: JSON.stringify(orderJson), //发送到服务器的数据 contentType: "application/json; charset=utf-8", // 发送到服务器的内容类型 dataType: "json", //来自服务器的预期数据格式 processdata: false, //真或假 success: function (result) //成功的服务调用 RedirectToMvcApp(结果); , error: function (request, error) //当Service调用失败时 alert('服务调用失败:' + request.status + ' ' + request.statusText); );

【讨论】:

以上是关于将复杂类型作为数据传递给 jquery ajax post的主要内容,如果未能解决你的问题,请参考以下文章

jQuery $.ajax(),将成功数据传递给单独的函数

使用 jquery ajax 将数据传递给 php 的问题

jQuery 将 Ajax 调用中的数据传递给 MVC 操作方法

通过 AJAX 将数据传递给 Laravel 控制器

将 JSON 数据传递给控制器​​方法而无需声明对象

AJAX 未将 Handsontable 数据传递给控制器