Ajax请求php返回json对象数据中包含有数字索引和字符串索引,在for in循环中取出数据的顺序问题
//php中的数组数据格式
Array
(
[all] => Array
(
[title] => ALL
[room_promotion_id] => all
) [best_available_rate] => Array
(
[title] => Best Available Rate
[room_promotion_id] => best_available_rate
) [30] => Array
(
[room_promotion_id] => 30
[version] => 1
[date_from] => 2014-08-05
[date_to] => 2014-09-30
[night_no] => 1
[discount_stype] => 1
[discount_rate] => 10
[discount_night] => 0
[title] => Summer Discount - Premier Suite
[summary] => <p>
Bring your family along to relax in the Summer! Enjoy a 10% off whenever you book Premier Suite.</p> [before_day] => 0
) )
//json_encode()之后输出的数据,这也是ajax返回的json数据对象
{"all":{"title":"ALL","room_promotion_id":"all"},
"best_available_rate":{"title":"Best Available Rate","room_promotion_id":"best_available_rate"},
"30":{"room_promotion_id":"30","version":"1","date_from":"2014-08-05","date_to":"2014-09-30","night_no":"1","discount_stype":"1",
"discount_rate":"10","discount_night":"0","title":"Summer Discount - Premier Suite",
"summary":"<p>\r\n\tBring your family along to relax in the Summer! Enjoy a 10% off whenever you book Premier Suite.<\/p>\r\n","before_day":"0"}}
//javascript代码
function ajaxPrmotion(){
var check_in_hidden = $('#check_in_hidden').val();
var check_out_hidden = $('#check_out_hidden').val();
var adults_num = $('#adult').attr('selected','selected').val();
var child_num = $('#child').attr('selected','selected').val();
var promotion_opt ='';
var url= "reservation.php?action_type=mobile_ajax&check_in="+check_in_hidden+"&check_out="+check_out_hidden+"&adult="+adults_num+"&child="+child_num+"&upd=1";
$.ajax({
url:url,
type : "get",
dataType : "json",
success: function(result) {
//$("select[name=promotion_id]").find("option").remove().end().append("<option value='0'>__($lang_text.best_rate)__</option>");
$("select[name=promotion_id]").find("option").remove();
var promotion_opt ='';
if (result!='' && result){
/×
使用for(var variablename in object){}循环出来的数据顺序与php中打印输出的数组中数据的顺序和json_encode()后的数据顺序是不同
最先循环取到的索引为30的数据,然后是all和best_available_rate,不知道这个究竟是怎么一回事。
因为在php中的数组中的顺序已经固定好了,json_encode()出来的数据也是和php数组中的顺序相同,但是为何在javascript中使用for in出来的数据
顺序反而不相同呢?只有两个原因: 1.jquery中对传输的json格式数据进行了排序吗?2.要么就是在for in发生的问题了
×/
for(var promotion in result){
promotion_opt += '<option value="' +result[promotion]["room_promotion_id"]+'">'+ result[promotion]["title"]+'</option>';
}
}
$("select[name=promotion_id]").append(promotion_opt);
}
});
}
所以,我自己写一段javascript代码来进行测试,发现问题的原因是在javascript的for in上面.
测试代码如下:
<script type="text/javascript">
var json_data = {"all":{"title":"all","room_promotion_id":"all"},
"best_room_rate": {"title":"best_room_rate","roompromotion_id":"best_room_rate"},
"30":{"title":"Summer Room rate" , "room_promotion_id":"30"}
};
for(var promotion in json_data){
alert(promotion);// 30->all->best_room_rate
}
</script>
针对上面的代码,我将"30"这个数字修改为"summer rate",代码如下:
<script type="text/javascript">
var json_data = {"all":{"title":"all","room_promotion_id":"all"},
"best_room_rate":{"title":"best_room_rate","roompromotion_id":"best_room_rate"},
"summer rate":{"title":"Summer Room rate" , "room_promotion_id":"30"}
}; for(var promotion in json_data){
alert(promotion);
//这次循环输出的结果完全就是按照上面定义的json_data数据中顺序
}
</script>
从上面的代码比较,我得出下面的结论,也许我的结论不一定是完全正确和合乎科学的。
结论:当json格式数据中既有包含有数字索引和文字索引时,那么在for in循环中首先取出来必定是数字索引的数据,然后就是按顺序取出文字索引的数据。
Ajax请求php返回json对象数据中包含有数字索引和字符串索引,在for in循环中取出数据的顺序问题的更多相关文章
- Jquery通过ajax请求NodeJS返回json数据
最近看了NodeJS相关的,在网上查了下结合AJAX的应用,感觉应用前景还是不错的.为什么用这个组合呢? 1.NodeJS不需要安装,拷贝过去就可以使用,而环境变量可以只配置在当前cmd窗口,运行方便 ...
- Spring MVC 中 AJAX请求并返回JSON
一.以ModelAndView的方式返回 先看下JavaScript代码: /** * 保存-同步(版本控制库) */ function saveSynchronizedVcHorse(obj) { ...
- 使用ajax请求SpringMVC返回Json出现乱码解决方法
1:在使用ajax请求后台访问数据的数据,后台返回的数据是乱码,带??问号的乱码,之前还一直没有遇到过,在这里记录整理一下,贴出解决代码! (1):前台使用ajax ,已经设定返回的结果为json格式 ...
- ajax 请求PHP返回json格式的处理
php返回代码格式 public function json(){ if (request()->isAjax()){ $data = [ 'code'=>'1', 'msg'=>' ...
- 关于ajax请求,返回json数据格式
使用servlet测试 后台数据为:返回类型没有设置(方式一) String str = "["+ "{ id:1, pId:0, name:\"可折腾的父节点 ...
- Ajax请求ashx 返回 json 格式数据常见问题
问题:ashx 返回的字符串json格式,在前台ajax自动解析失败. 问题分析:经过排查,发现是拼接json时出现” ’ “单引号,jquery无法解析,用” “ “双引号才可以.例如: stri ...
- ajax请求action返回json数据
1,服务端: HttpServletResponse response = ServletActionContext.getResponse(); response.setContentType(&q ...
- Struts2返回JSON对象的方法总结
如果是作为客户端的HTTP+JSON接口工程,没有JSP等view视图的情况下,使用Jersery框架开发绝对是第一选择.而在基于Spring3 MVC的架构下,对HTTP+JSON的返回类型也有很好 ...
- Query通过Ajax向PHP服务端发送请求并返回JSON数据
Query通过Ajax向PHP服务端发送请求并返回JSON数据 服务端PHP读取MYSQL数据,并转换成JSON数据,传递给前端Javascript,并操作JSON数据.本文将通过实例演示了jQuer ...
随机推荐
- $(this).form("validate") 始终返回false
onsubmit 提交前触发,返回 false 来阻止提交动作. validate 进行表单字段验证,当全部字段都有效时返回 true .该方法和 validatebox 插件一起使用. 解决:注释掉 ...
- 使用JSON.parse()转化成json对象需要注意的地方
http://blog.csdn.net/u011277123/article/details/53055479 有三种方法: var str = '{"name":"小 ...
- cmd无法输入中文解决方案
1.regedit 2.选中HKEY_CURRENT_USER-Console,找到LoadConIme,双击,设置值为1,十六进制 3.此时应该已经ok了.如还不行,看一下%systemroot%\ ...
- DOS中符号的英文对照
--------------siwuxie095 1..:point 或 dot 或 period 或 full stop 2.空格:space 或 blank ------------------- ...
- PyQt5信号与槽
简单使用 可以使用designer的一个模式定义,也可以自己定义,在__init__函数里,self.btn.clicked.connect(self.text.clear). 注意:槽不用加括号,可 ...
- Django的模板语言介绍
模板语言: 1.我们先看下在命令行中渲染模板 先导入模块对象 2.渲染一个变量 <p>当前时间:{{ time }}</p> return render(request,&qu ...
- nginx安装及基础配置(含jdk安装及配置)
0.jdk安装配置 #下载相应的jdk软件包,然后解压安装,我这里包名称为:jdk-7u25-linux-x64.tar.gz tar -xzf jdk-7u25-linux-x64.tar.gz m ...
- Spring框架之演示JDBC的模板类
1. 步骤一:创建数据库的表结构 create database spring_day03; use spring_day03; create table t_account( id int prim ...
- resin-pro-4.0.53报错java.lang.Error: java.lang.ClassNotFoundException: com.caucho.loader.SystemClassLoader
最初并未发现,笔者的系统环境变量JAVA_HOME变量设置错误 D:\develop\Java\x64\jdk1.8.0_144 #最初使用了阉割版的JDK 改成完整安装的JDK就可以 D:\deve ...
- vmware fusion 10序列号
vmware fusion pro 10序列号 亲测可用激活 FG3TU-DDX1M-084CY-MFYQX-QC0RD