AJAX 将对象数组发布到端点

Posted

技术标签:

【中文标题】AJAX 将对象数组发布到端点【英文标题】:AJAX Post array of objects to endpoint 【发布时间】:2017-10-21 17:57:09 【问题描述】:

我正在尝试将一组对象发布到 API 端点 (onClick),但我不断收到 400 Bad Request 错误。

我不完全确定我在这里做错了什么,希望在这个问题上得到一些帮助。

我的代码如下:

$('#test-post').on('click', function() 

          var postData = [
            
              "artist": "Artist Name",
              "title": "Artist Title",
              "genre": "string",
              "duration": "2:05",
              "url": "Artist url",
            ,
            
              "artist": "Artist Name",
              "title": "Artist Title",
              "genre": "string",
              "duration": "2:05",
              "url": "Artist url",
            
          ];

          $.ajax(
            url: 'http://localhost:8000/api/endpoint',
            type: 'POST',
            dataType: 'json',
            contentType: 'application/json',
            data: JSON.stringify(postData),
            success: function(data) 
              console.log('Data has been posted');
              console.log(data);
            ,
            error: function(err) 
              console.log(err.statusText);
            
          );
        );

任何帮助将不胜感激。

谢谢

【问题讨论】:

【参考方案1】:

这是工作代码。似乎缺少 JQuery。

$('#test-post').on('click', function() 

          var postData = [
            
              "artist": "Artist Name",
              "title": "Artist Title",
              "genre": "string",
              "duration": "2:05",
              "url": "Artist url",
            ,
            
              "artist": "Artist Name",
              "title": "Artist Title",
              "genre": "string",
              "duration": "2:05",
              "url": "Artist url",
            
          ];

          $.ajax(
            url: 'http://localhost:8000/api/endpoint',
            type: 'POST',
            dataType: 'json',
            data: 'params': JSON.stringify(postData),
            success: function(data) 
              console.log('Data has been posted');
              console.log(data);
            ,
            error: function(err) 
              console.log("Error is: " + err.statusText);
            
          );
        );
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="test-post">Click me</div>

端点 URL 有这个简单的代码。这有效。 &lt;?php echo $_POST['params']; ?&gt;

【讨论】:

我在我的 site.js 文件之前的页脚中放置了 jQuery。我认为这不是问题。 @milan-chheda 如果 JQuery 正在加载,您能否在控制台中检查。另外,请分享 html 代码以更好地理解问题。你可以试试我上面的代码,它不会抛出 400 bad request。 我检查并加载了 jQuery。 html 代码仅包含 id 为test-post 的按钮。如果我运行你的 sn-p 会给出以下错误:Error is: error 是的,Error is: error 写在错误回调中。你能验证请求的 URL 是否被命中并且返回 JSON 吗? 是的,它确实返回 JSON。我尝试发布像 var postData = "artist": "Artist Name", "title": "Artist Title", "genre": "string", "duration": "2:05", "url": "Artist url", 这样的单个对象,这似乎发布成功【参考方案2】:

如果您使用的是 ASP .Net MVC 请检查您是否使用了正确的过滤器,默认情况下将 [HttpPost] 用于 POST 请求,它会将其视为 Get 请求

[HttpPost]
public JsonResult endpoint()

【讨论】:

我没有使用 ASP .Net。只是使用 jQuery AJAX 做一个帖子

以上是关于AJAX 将对象数组发布到端点的主要内容,如果未能解决你的问题,请参考以下文章

jquery ajax后混合数组对象将空数组发送到php

jQuery Ajax 不将数组作为数据对象发送

如何使用 AJAX (jquery) 将嵌套的对象数组传递和接收到 c# WebMethod 中?

Ajax 将带有两个数组的 JSON 对象发送到一个 servlet 并在没有 jQuery 的情况下在 java servlet 中解析

jQuery 1.4.4+ AJAX 请求 - 发布空数组或对象变成字符串

如何在NodeJS服务器中解析ajax发送的数组/对象