gpt4 book ai didi

php json - 以返回的数组顺序显示问题(json 排序)

转载 作者:行者123 更新时间:2023-12-01 00:05:38 25 4
gpt4 key购买 nike

简介:

我有 2 个下拉菜单。第二个下拉列表是根据第一个下拉列表 (index.html) 的值通过 json (json_display.php) 加载的。我已经使用 json - append() 来加载下拉菜单。

问题:

下拉列表中的 json append() 始终按数组键的升序排列。预期结果是以 json_display.php 返回的任何数组顺序的格式显示。

  • 我有警报 jquery theResponse,显示错误的排序顺序。
  • 我尝试过将数组键用作整数和字符串,在这两种情况下,输出也是相同的。

注意:

(实际上我试图按日期降序检索 mysqli 行并将 id => name 存储在数组中并返回)

为了简单起见,我将代码的问题部分提取到 index.htmljson_display.php 中,它们是更大编码的一部分。还将 mysql 检索更改为数组。出于解释目的,名称和所有值均已更改。

Graphical Explanation

Graphical Representation

<小时/>

index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test</title>
<script type="text/javascript" src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>

<script type="text/javascript">
$(document).ready(function(){

$("#frm").on('change', ' #first_select_box', function(){
var $this = $(this);
var this_val = $this.val();

$('#second_select_box option').not(':eq(0)').remove();

$.ajax({
type : "POST",
url : "json_display.php",
data : { first_select_id: this_val },
dataType : 'json',
success : function(theResponse) {

//alert(JSON.stringify(theResponse));

$.each(theResponse, function(key, value) {
$('#second_select_box')
.append($("<option></option>")
.attr("value",key)
.text(value));
});
}

});

});
});
</script>
</head>

<body>

<form id="frm" name="frm" method="post" action="#a">

<select id="first_select_box" name="first_select_box">
<option value="0">[First Drop Down]</option>
<option value="1">Numbers</option>
<option value="2">Fruits</option>
<option value="3">Teens</option>
</select>

<select id="second_select_box" name="second_select_box">
<option value="0">[Select]</option>
</select>

</form>

</body>
</html>

json_display.php

<?php
$Array[0] = array();
$Array[1] = array(10 => 'Ten',
9 => 'Nine',
8 => 'Eight',
7 => 'Seven',
6 => 'Six',
5 => 'Five',
4 => 'Four'
);

$Array[2] = array(8 => 'Apple',
1 => 'Orange',
3 => 'Banana',
2 => 'Watermelon',
7 => 'Lemon'
);

$Array[3] = array(17 => 'Seventeen',
11 => 'Eleven',
13 => 'Thirteen',
15 => 'Fifteen',
12 => 'Twelve',
14 => 'Fourteen',
16 => 'Sixteen'
);

$first_select_id = isset($_POST['first_select_id']) ? $_POST['first_select_id'] : 0;

$return_array = $Array[$first_select_id];

echo json_encode($return_array);

?>

最佳答案

我也遇到了类似的问题。我的 C# 应用程序允许用户覆盖表中值列表的默认排序顺序,因此传回 JavaScript 的数据不一定按字母或数字顺序排列。当数据离开我的 MVC Controller 操作时,数据的顺序是正确的,但是当检查返回到浏览器的响应时,列表已按数字键排序。

由于我需要按照用户指定的顺序选择列表选项,因此我尝试按照 Thamilan 的建议在键的开头添加一个空格,但不幸的是这不起作用。仅添加任何旧字符也是行不通的,因为它仍然会根据字母数字排序规则对其进行排序,而且我根本不希望它被排序。

因此,我在循环中添加了一个计数器,该计数器添加到返回到浏览器的列表中,并在计数器的值前面加上“.”。在将其添加到列表中时将其添加到我的 key 中,以便我返回的列表在返回到浏览器时看起来像这样:

sample data returned from controller

这确保了字母数字排序始终按照我特意创建的顺序。因此,我在 javascript 中所要做的就是根据我的应用程序的要求提取选项列表的正确键值。为此,我只是删除了前缀计数器和“。”使用 split 从我的 key 中:

var optionValue = xhrKey.split(".")[1]; 

生成的选择列表的顺序与从我的 Controller 返回的顺序相同,并且为选择列表中的选项分配了正确的值。

关于php json - 以返回的数组顺序显示问题(json 排序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37064706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com