如何正确地将 URL 参数添加到 AJAX 数据对象

How do you properly add URL parameters to an AJAX data object?

本文关键字:AJAX 数据 对象 添加 参数 正确地 URL      更新时间:2023-09-26

我遇到了一个奇怪的问题,我似乎无法弄清楚。我的应用使用 AJAX 来命中 JSON 并检索数据。我正在使用平台的内置参数支持过滤categorytag。所以我的格式(有效(看起来像这样:

示例(工作(:

$.ajax({
  url: "http://blog.squarespace.com/blog", 
  data: {format:"json",tag:"mobile"}, 
  dataType: "json", 
  method: "GET"
}).done(function(data){ console.log(data) });

记录的数据:

Object {website: Object, websiteSettings: Object, collection: Object, template: Object, shoppingCart: Object…}
calendarView: false
collection: Object
empty: false
emptyFolder: false
items: Array[1]
shareButtons: Object
shoppingCart: Object
showCart: false
tagFilter: "mobile"
template: Object
website: Object
websiteSettings: Object
__proto__: Object

在上面,您可以看到它检索了一个items数组,因为存在一个帖子。

当我遇到使用多个单词或非字母字符的类别/标签时,就会出现问题。

AJAX 请求示例(不工作(:

$.ajax({
  url: "http://blog.squarespace.com/blog", 
  data: {format:"json",tag:"Lee%20and%20Morris"}, 
  dataType: "json", 
  method: "GET"
}).done(function(data){ console.log(data) });
Object {website: Object, websiteSettings: Object, collection: Object, template: Object, shoppingCart: Object…}
calendarView: false
collection: Object
empty: false
emptyFolder: false
shareButtons: Object
shoppingCart: Object
showCart: false
tagFilter: "Lee%20and%20Morris"
template: Object
website: Object
websiteSettings: Object
__proto__: Object

您只需访问浏览器中的 URL 即可确认此位置有可用的帖子:http://blog.squarespace.com/?format=json&tag=Lee%20and%20Morris

尝试调试后,我还发现通过附加标签参数并点击该 URL,它可以按预期工作。

示例(工作(:

$.ajax({
  url: "http://blog.squarespace.com/blog?tag=Lee%20and%20Morris", 
  data: {format:"json"}, 
  dataType: "json", 
  method: "GET"
}).done(function(data){ console.log(data) });
calendarView: false
collection: Object
empty: false
emptyFolder: false
items: Array[1]
shareButtons: Object
shoppingCart: Object
showCart: false
tagFilter: "Lee%20and%20Morris"
template: Object
website: Object
websiteSettings: Object
__proto__: Object

所以我的问题是,为什么在使用data对象时这不起作用,但在其他方面工作正常?

根据Felix King的评论,我的问题是由于jQuery为您编码数据对象字符串。通过简单地使用未编码的字符串执行请求,我的问题得到了解决。

$.ajax({
  url: "http://blog.squarespace.com/blog", 
  data: {format:"json",tag:"Lee and Morris"}, 
  dataType: "json", 
  method: "GET"
}).done(function(data){ console.log(data) });