如何防止jQuery's $.getJSON从转换我的ajax响应键从字符串到整数
How can I prevent jQuery's $.getJSON from converting my ajax response keys from strings to integers?
我试图使用一个JSON响应对象,通过电子邮件排序填充一个选择框,但JQuery似乎正在改变键的类型从文本到整数,从而通过现在的数字索引重新排序响应对象,搞砸了选择框的顺序。
json响应,如
{"2":"aaron@mail.com","1":"bernard@mail.com"}
后面的代码类似于:
$.getJSON('urlwithjsonresponse.com',function(response){
console.log(response);
});
输出如下对象:
{1:"bernard@mail.com",2:"aaron@mail.com"}
如何防止这种转换/重新排序?
注。对于$.ajax
这里有两点不对。
1) JSON键总是字符串。没有引号并不代表它就是数字。它只是表示密钥名称是"安全的",即不包含空格或其他特殊字符。
2) JSON散列键绝对不能保证按任何特定顺序排列。如果你期望他们是,那么你的期望是错误的。您应该将数据序列化为对象(或字符串)数组,而不是单个哈希对象。
["bernard@mail.com","aaron@mail.com"]
或
[{key:1,value:"bernard@mail.com"},{key:2, value:"aaron@mail.com"}]
实际上是三件事
3)您看到的输出与jQuery无关。这就是console.log()
如何序列化你给它的哈希对象。
如果你想确保JSON转换后的顺序是正确的,你应该在发送之前在PHP中重新索引你的数组:
$a = [ 2 => "aaron@mail.com", 1 => "bernard@mail.com" ];
$a = array_values( $a );
exit( json_encode( $a ) );
这将确保对象中的元素至少以您发送它们的顺序到达。您将丢失键,如果您想保留这些键,则需要将它们添加到对象中(例如,如果索引是对象的ID):
$a = [
2 => [ "id" => 2, "email" => "aaron@mail.com" ],
1 => [ "id" => 1, "email" => "bernard@mail.com" ]
];
exit( json_encode( array_values( $a ) );
相关文章:
- MockJax没有在JavaScript应用程序中发送对我AJAX请求的响应
- 从我的控制器返回一个不同于200的代码以触发ajax错误,这被认为是一种好的做法吗
- 为什么可以't我使用了AJAX响应的一部分
- ajax请求成功,但可以'我看不到我的数据
- 我可以让我的Ajax调用引起一个“;进行中”;光标
- 为什么我的ajax在提交用@HtmlRenderPartial加载的表单时只调用fire一次
- 当在文档中拖动mouseup/mouseleve时,我想调用我的Ajax请求
- AJAX:为什么不是't我的javascript与内容一起加载
- 我如何发送AJAX请求的内容是通过无限滚动加载的
- 使用Ajax将我的Javascript变量传递给PHP
- 我的ajax表单没有提交
- JQuery$.ajax()发布数据以调用我的控制器中的方法
- 我可以't从通过Ajax创建的select元素中设置值或获取值
- 我可以获得用Ajax调用的函数的返回代码吗
- 为什么我发布的数据在这个AJAX调用的Controller目标中为null
- 为什么我的Jquery.ajax调用会触发错误事件
- 当我想发布一个变量但有 1 个 js 时,ajax post 的解决方案是什么
- AJAX 请求没有在我的 React 组件中设置 this.state.data
- 我可以测试jsonp ajax调用的任何公共API
- Jquery + ajax.我的javascript函数有什么问题?删除记录,添加记录而不刷新