【问题标题】:How to pass an array as a querystring in a GET request by using JQuery AJAX如何使用 JQuery AJAX 在 GET 请求中将数组作为查询字符串传递
【发布时间】:2018-08-29 09:18:45
【问题描述】:

在我的 javascript 应用程序中,我尝试使用 jQuery Ajax 在 GET 请求中将字符串数组以及其他参数传递给 ASP.NET Web API REST 服务。 示例网址如下:

http://my.services.com/products?userId=1abc&id=1&id=2&id=3

Web API 方法的签名:

[HttpGet("products")]
public IActionResult GetProducts(string userId, int[] id)

如果我使用 Postman 尝试请求,则参数绑定可以正常工作。在 Javascript 应用程序中,我尝试了几种解决方案,但都没有成功。代码如下:

let data = {
  'userId': '1abc'
  'id': [1,2,3]
}

$.ajax({
   type: 'get',
   url: 'http://my.services.com/products',
   data: data,
   crossDomain: true, //CORS
   cache: false,
}

在这种情况下,URL 变为:

http://my.services.com/products?userId=1abc&id%5B%5D=1&id%5B%5D=2&id%5B%5D=3

由于在解析结果中不是使用id作为key,而是使用id[],因此将字符[]编码为%5B%5D

即使我使用此代码也没有运气:

let data = {
  'userId': '1abc'
  'id': JSON.stringify([1,2,3])
}

或(如answer所示)

let data = {
  'userId': '1abc'
  'id[]': [1,2,3]
}

请记住,对于其他调用,上面的代码 JQuery AJAX 代码可以正常工作。

【问题讨论】:

    标签: jquery arrays ajax serialization get


    【解决方案1】:

    请求的问题是因为默认的 ASP.Net 模型绑定器期望数组作为单独的键/值对通过查询字符串发送,如您的第一个示例 URL 所示。

    要实现这一点,您只需在 jQuery $.ajax() 请求中设置 traditional: true

    let data = {
      userId: '1abc'
      id: [ 1, 2, 3 ]
    }
    
    $.ajax({
      type: 'get',
      url: 'http://my.services.com/products',
      data: data,
      traditional: true
    });
    

    另外,作为旁注,在发出 AJAX 请求时要小心使用绝对 URL,如果代码没有定期维护,您很容易遇到 CORS 问题。我建议尽可能使用相对路径。

    【讨论】:

    • 感谢您的解决方案,它有效,我不知道这个传统参数。我编辑了我的问题,因为语法问题是我在复制/粘贴代码期间犯的错字。
    • 没问题,很高兴为您提供帮助。我删除了有关语法的注释:)
    • 注意所有使用其他后端(如 Drupal、PHP)的人:使用传统:false(默认)。
    • 对于像我这样想知道传统适合什么的人:api.jquery.com/jQuery.param
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多