当前位置: 首页 > 面试题库 >

如何构建JSON对象以发送到AJAX WebService?

蒋嘉颖
2023-03-14
问题内容

在尝试使用javascript手动格式化JSON数据并失败后,我意识到可能有更好的方法。这是Web服务方法和相关类的代码在C#中的样子:

[WebMethod]
public Response ValidateAddress(Request request)
{
    return new test_AddressValidation().GenerateResponse(
        test_AddressValidation.ResponseType.Ambiguous);
}

...

public class Request
{
    public Address Address;
}

public class Address
{
    public string Address1;
    public string Address2;
    public string City;
    public string State;
    public string Zip;
    public AddressClassification AddressClassification;
}

public class AddressClassification
{
    public int Code;
    public string Description;
}

该Web服务可以很好地使用SOAP /
XML,但是我似乎无法使用javascript和jQuery得到有效的响应,因为我从服务器返回的消息存在我的手工编码JSON问题。

我不能使用jQuery getJSON函数,因为该请求需要HTTP POST,因此我改用了较低层的ajax函数:

$.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    url: "http://bmccorm-xp/HBUpsAddressValidation/AddressValidation.asmx/ValidateAddress",
    data: "{\"Address\":{\"Address1\":\"123 Main Street\",\"Address2\":null,\"City\":\"New York\",\"State\":\"NY\",\"Zip\":\"10000\",\"AddressClassification\":null}}",
    dataType: "json",
    success: function(response){
        alert(response);
    }
})

ajax函数将提交中指定的所有内容data:,这就是我的问题所在。如何在javascript中构建格式正确的JSON对象,以便将其插入到ajax调用中,如下所示:

data: theRequest

我最终将以表格形式从文本输入中提取数据,但现在硬编码的测试数据还可以。

如何构建格式正确的JSON对象以发送到Web服务?

更新:事实证明,我的请求的问题不是TJ指出的JSON格式,而是我的JSON文本不符合Web服务的要求。
这是一个基于WebMethod中代码的有效JSON请求:

'{"request":{"Address":{"Address1":"123 Main Street","Address2":"suite 20","City":"New York","State":"NY","Zip":"10000","AddressClassification":null}}}'

问题答案:

数据应使用JSON编码。您应该对每个输入参数进行单独编码。因为只有一个参数,所以您应该执行以下操作:

首先将您的数据构造为本地JavaScript数据,例如:

var myData = {Address: {Address1:"address data 1",
                        Address2:"address data 2",
                        City: "Bonn",
                        State: "NRW",
                        Zip: "53353",
                        {Code: 123,
                         Description: "bla bla"}}};

然后给作为ajax请求的参数 {request:$.toJSON(myData)}

$.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    url: "http://bmccorm-xp/HBUpsAddressValidation/AddressValidation.asmx/ValidateAddress",
    data: {request:$.toJSON(myData)},
    dataType: "json",
    success: function(response){
        alert(response);
    }
})

您可以使用http://www.json.org/中的另一个版本(JSON.stringify),而不是来自JSON插件的$.toJSON

如果您的WebMethod具有如下参数

public Response ValidateAddress(Request request1, Request myRequest2)

调用data参数的值ajax应类似于

data: {request1:$.toJSON(myData1), myRequest2:$.toJSON(myData2)}

要么

data: {request1:JSON.stringify(myData1), myRequest2:JSON.stringify(myData2)}

如果您喜欢其他版本的JSON编码器。



 类似资料:
  • 问题内容: 我正在尝试将JSON对象从Javascript / Jquery发送到PHP,并且在控制台中收到错误消息msg。我究竟做错了什么。我是JS和PHP的新手。 jQuery文件: PHP文件 问题答案: 菲尔(Phil)的出色回答,但自从OP标题说 从javascript( 不是jQuery )发送json对象到php 这是使用(原始)javascript的方法,以防万一有人寻找此方法:

  • 过去几天我一直在研究,但我想不出这个问题。 目标:用户使用angular-file-upload表单上传一个文本文件,multer将文件保存到一个临时文件夹。然后发布数据,用户可以在同一页面或重定向页面上看到文件元数据和内容。 问题:在我的POST路由中,我可以console.log(req.file),它显示文件元数据。文件保存到临时文件夹。 我尝试res.send(req.file)、res.

  • 问题内容: 我正在创建json对象以保存数据,然后将其发送到servlet。但是,当我尝试检索该对象并将其内容显示在Java Servlet中时,它抛出一个错误,提示“ JSONObject文本必须在1 [字符2行1]处以’{‘开头。我不知道如何在Java中显示从javascript发送的json对象。这是我在做什么: JavaScript代码: 显示Javascript内容: 使用jQuery

  • 我们正在尝试为现有的java web应用程序创建一个Android应用程序,并尝试访问java JSON数据。 我们对如何将JSON数据发送到请求感到震惊。 我们考虑创建一个java api并作为请求的响应发送。 请提出任何解决方案, 提前谢谢。

  • 问题内容: 我是Python的新手,并且正在使用JSON数据。我想通过向现有JSON对象添加一些键值来动态构建JSON对象。 我尝试了以下方法,但得到了: 问题答案: 您在将对象编码为JSON字符串 之前先 对其进行构建: JSON是 序列化 格式,文本数据 表示 结构。它本身不是那个结构。

  • 问题内容: 我想发送以下JSON文本 到Web服务并读取响应。我知道如何读取JSON。问题是上述JSON对象必须以变量名发送。 我该如何从android做到这一点?创建请求对象,设置内容标头等步骤是什么。 问题答案: Android没有用于发送和接收HTTP的特殊代码,您可以使用标准Java代码。我建议使用Android随附的Apache HTTP客户端。这是我用来发送HTTP POST的代码片段