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

jQuery Ajax将json发布到Web服务

陆耀
2023-03-14
问题内容

我正在尝试将JSON对象发布到asp.net Web服务。

我的json看起来像这样:

var markers = { "markers": [
  { "position": "128.3657142857143", "markerPosition": "7" },
  { "position": "235.1944023323615", "markerPosition": "19" },
  { "position": "42.5978231292517", "markerPosition": "-3" }
]};

我正在使用json2.js对我的json对象进行stringyfy。

我正在使用jQuery将其发布到我的Web服务。

  $.ajax({
        type: "POST",
        url: "/webservices/PodcastService.asmx/CreateMarkers",
        data: markers,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(data){alert(data);},
        failure: function(errMsg) {
            alert(errMsg);
        }
  });

我收到以下错误:

“无效的JSON原语:

我发现了一堆与此相关的帖子,这似乎是一个非常普遍的问题,但我没有尝试解决此问题。

当萤火虫被发布到服务器时,它看起来像这样:

markers%5B0%5D%5Bposition%5D =
128.3657142857143&markers%5B0%5D%5BmarkerPosition%5D =
7&markers%5B1%5D%5Bposition%5D =
235.1944023323615&markers%5B1%5D%5BmarkerPosition%5D = B&B%2% 5D =
42.5978231292517&markers%5B2%5D%5BmarkerPosition%5D = -3

我正在调用的Web服务功能是:

[WebMethod]
public string CreateMarkers(string markerArray)
{
    return "received markers";
}

问题答案:

您提到使用json2.js来对数据进行字符串化,但是POSTed数据似乎是URLEncoded
JSON您可能已经看过了,但是这篇关于无效JSON原语的文章介绍了为什么对JSON进行URLEncoded。

我建议 不要 将原始的,手动序列化的JSON字符串传递到您的method中。ASP.NET将自动对请求的POST数据进行JSON反序列化,因此,如果要手动序列化JSON字符串并将其发送到ASP.NET,则实际上最终将不得不对JSON序列化的JSON序列化。

我会根据以下建议提出更多建议:

var markers = [{ "position": "128.3657142857143", "markerPosition": "7" },
               { "position": "235.1944023323615", "markerPosition": "19" },
               { "position": "42.5978231292517", "markerPosition": "-3" }];

$.ajax({
    type: "POST",
    url: "/webservices/PodcastService.asmx/CreateMarkers",
    // The key needs to match your method's input parameter (case-sensitive).
    data: JSON.stringify({ Markers: markers }),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(data){alert(data);},
    failure: function(errMsg) {
        alert(errMsg);
    }
});

避免无效JSON原语问题的关键是向jQuery传递data参数的JSON字符串(而不是JavaScript对象),以使jQuery不会尝试对数据进行URL编码。

在服务器端,将方法的输入参数与要传递的数据的形状匹配:

public class Marker
{
  public decimal position { get; set; }
  public int markerPosition { get; set; }
}

[WebMethod]
public string CreateMarkers(List<Marker> Markers)
{
  return "Received " + Markers.Count + " markers.";
}

Marker[] Markers如果愿意,还可以接受一个数组,例如。ASMX
ScriptServices使用的反序列化器(JavaScriptSerializer)非常灵活,它将尽其所能将输入数据转换为您指定的服务器端类型。



 类似资料:
  • 问题内容: 我必须将以下数据发送到URl的Web服务 要发送的数据格式为: 其中,和是键,并具有通过edittext字符串获取的相应值字符串。我在单击按钮时发布此数据。 我没有收到任何回应,因为我试图与我的合作开发者在他的iPhone相同的应用程序iPhone版本中与我的合作开发者进行反检查,因为服务器说用户名和密码无效。 我的课是: 请协助我,我是JSON和Android.Thanx解析的新手。

  • 我是新Kubernetes。我在一个pod中实现了一个网络服务器,并为该pod设置了一个Nodeport服务。我想发送一个POST请求与自定义消息(在json中)到一个pod后,它已经被创建并准备好使用。我想使用go客户端库。你能告诉我怎么做吗?图书馆的哪个部分来帮忙?谢谢。

  • 问题内容: 如何使用AngularJS发送POST请求?JSON部分是必需的,但文件不是必需的。我已经根据其他博客文章尝试过此方法,但是它不起作用。我收到一个 错误的请求400错误 。 200点正确答案将被添加 问题答案: 我已经用一个简单的Spring后端测试了您的代码,并且工作正常: 我已将您的客户端代码与angular v1.1.5一起使用: 请求看起来像这样(从Chrome控制台的“网络”

  • 问题内容: 我创建了一个需要发布到jersey的json,这是由grizzly运行的具有REST网络服务的服务器获取需要输出的传入json对象。我正在尝试,但不确定如何正确实施。 我有一个在加载时运行此方法的html文件 问题答案: 要将json发送到服务器,首先必须创建json 这就是构造ajax请求以将json作为post var发送的方式。 json现在将在post var中。

  • 问题内容: 我的问题是我取回了一些数据,但似乎无法显示它。 问题答案: 应该是您收到的内容的类型,但应该是您要发送的内容的哑剧类型,以下应该可以:

  • 问题内容: 我试图向laravel发送json的发布请求。该请求在服务器上收到,但是当我尝试访问属性时,我得到: “试图获取非对象的属性” 。在客户端上,我正在使用angularjs。 角度: laravel: 注意:我可以在Fiddler中看到正在发送的JSON是有效的,并且到达了controller + method(http 200)。 帖子请求本身(如Fiddler所示) 问题答案: La