How do I build a JSON object to send to an AJAX WebService?(如何构建 JSON 对象以发送到 AJAX WebService?)
问题描述
在尝试用 javascript 手动格式化我的 JSON 数据并惨遭失败后,我意识到可能有更好的方法.以下是 C# 中 Web 服务方法和相关类的代码:
After trying to format my JSON data by hand in javascript and failing miserably, I realized there's probably a better way. Here's what the code for the web service method and relevant classes looks like in C#:
Web 服务非常适合使用 SOAP/XML,但我似乎无法使用 javascript 和 jQuery 获得有效响应,因为我从服务器返回的消息与我的手动编码 JSON 存在问题.
The web service works great with using SOAP/XML, but I can't seem to get a valid response using javascript and jQuery because the message I get back from the server has a problem with my hand-coded JSON.
我不能使用 jQuery getJSON
函数,因为请求需要 HTTP POST,所以我改用较低级别的 ajax
函数:
I can't use the jQuery getJSON
function because the request requires HTTP POST, so I'm using the lower-level ajax
function instead:
ajax
函数正在提交 data:
中指定的所有内容,这就是我的问题所在.如何在 javascript 中构建格式正确的 JSON 对象,以便可以将其插入到我的 ajax
调用中,如下所示:
The ajax
function is submitting everything specified in data:
, which is where my problem is. How do I build a properly formatted JSON object in javascript so I can plug it in to my ajax
call like so:
我最终会从表单中的文本输入中提取数据,但目前硬编码的测试数据很好.
I'll eventually be pulling data out of text inputs in forms, but for now hard-coded test data is fine.
如何构建格式正确的 JSON 对象以发送到 Web 服务?
更新:事实证明,我的请求的问题不在于 JSON 的格式,因为 T.J.指出,而是我的 JSON 文本不符合 Web 服务的要求.这是基于 WebMethod 中的代码的有效 JSON 请求:
这又引出了另一个问题:在对 ASP.NET Web 服务 (ASMX) 的 JSON 请求中,区分大小写何时重要?
This brought up another question: When is case sensitivity important in JSON requests to ASP.NET web services (ASMX)?
推荐答案
答案很简单,基于我之前的帖子 如果 ContentType 不是 JSON,我可以从 .asmx Web 服务返回 JSON 吗? 和 JQuery ajax 调用 httpget webmethod (c#) 不工作.
The answer is very easy and based on my previous posts Can I return JSON from an .asmx Web Service if the ContentType is not JSON? and JQuery ajax call to httpget webmethod (c#) not working.
数据应该是 JSON 编码的.您应该单独编码每个输入参数.因为你只有一个参数,你应该这样做:
The data should be JSON-encoded. You should separate encode every input parameter. Because you have only one parameter you should do like following:
首先将您的数据构建为原生 JavaScript 数据,例如:
first construct you data as native JavaScript data like:
然后作为ajax请求的参数给出{request:$.toJSON(myData)}
then give as a parameter of ajax request {request:$.toJSON(myData)}
您可以使用来自 http 的另一个版本 (JSON.stringify),而不是来自 JSON 插件的 $.toJSON://www.json.org/
如果你的 WebMethod 有类似的参数
If your WebMethod had parameters like
ajax
调用的data
参数的值应该是这样的
the value of data
parameter of the ajax
call should be like
或
如果您更喜欢其他版本的 JSON 编码器.
if you prefer another version of JSON encoder.
这篇关于如何构建 JSON 对象以发送到 AJAX WebService?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!