Php jQuery.inArray条件返回false,尽管json数组中存在元素
我试图做的是调用将数据从mysql加载到通过jQuery调用的php中,然后对数组进行json_编码,并通过标题“Content-type:application/json”将其发送到jQuery函数,该函数随后将数组作为数据进行处理,以更新页面上的特定元素 我已经到了最后一圈,让jQuery进行调用,php访问数据库,并将数据作为json数组发送回主页面,并用它们的新数据更新大部分元素。我一直在分析数组中某个元素的特定属性:确定数组中是否存在指定元素,如果存在,则禁用并隐藏输入元素 调用返回的是btn1:true是一个任意值,无论我如何检查它的存在性,inArray都会给我一个-1,这意味着,即使它作为数组的一个元素成功通过,我的代码也无法找到它 以下是进行呼叫和处理传入数据的代码:Php jQuery.inArray条件返回false,尽管json数组中存在元素,php,jquery,json,Php,Jquery,Json,我试图做的是调用将数据从mysql加载到通过jQuery调用的php中,然后对数组进行json_编码,并通过标题“Content-type:application/json”将其发送到jQuery函数,该函数随后将数组作为数据进行处理,以更新页面上的特定元素 我已经到了最后一圈,让jQuery进行调用,php访问数据库,并将数据作为json数组发送回主页面,并用它们的新数据更新大部分元素。我一直在分析数组中某个元素的特定属性:确定数组中是否存在指定元素,如果存在,则禁用并隐藏输入元素 调用返回的
<script type = "text/javascript">
$(document).ready(function () {
$('#refresh').click(function () {
$.get('includes/refresh.php', function (data) {
if (jQuery.inArray(btn1, data) > -1) {
$('#btn1').prop("disabled", true);
$('#btn1').hide();
}
});
});
});
</script>
下面是一个例子,虽然没有确切了解数组的格式,但是在这里得到积极的结果并没有帮助
下面是从mysql中提取数据并将其作为json数组发送回的代码:
if (isset($_SESSION['id'])) {
$divs = array ();
$divs['item'] = $row['item'];
$divs['cost'] = "Ticket price: ".$row['cost'];
for ($i = 1; $i < 20; $i++) {
$divs['tname'.$i] = $row['t'.$i];
if ($row['t'.$i] != "") {
$divs['btn'.$i] = "true";
}
}
$divs['end'] = $row['end'];
$divs['winner'] = $row['winner'];
header('Content-type: application/json');
echo json_encode($divs);
die();
} else {
// nothing to refresh. clear the page and prompt user to start a new raffle.
}
。。。这是我想让它消失的按钮:
<input id="btn1" class="submit" name="t1" type="submit" value="Buy!" />
总之,调用正在运行,数据被从mysql中拖出并编译成json编码的数组,该数组随后被传递给调用脚本并被调用脚本接收。我的元素检查无法在数组中找到我知道的内容。我忽略了什么?两件事。使用而不是get,因为您得到的是JSON
$.getJSON('includes/refresh.php', function (data)...`
你正在发送这些数据
$divs['btn'.$i] = "true";
// which gives $divs['btn1'] = "true";
但您将btn1用作变量,而不是字符串文字
if (jQuery.inArray(btn1, data) > -1) {
它是一个键,而不是数组中的变量
应该是
if (data.btn1) {
// or to be really specific:
// if (typeof data.btn1!='undefined' && data.btn1)
另外,虽然真是真,假也是假,但我认为你指的是$divs['btn'.$I]=true
这也不是问题的一部分但是
$('#btn1').prop("disabled", true);
$('#btn1').hide();
不需要一直选择元素。连锁指挥
$('#btn1').prop("disabled", true).hide();
每次选择它时,jQuery都必须搜索它。如果无法链接它们,请设置一个变量$btn=$'btn1';并使用$btn1.hide$btn1.show 上述回答btn1:true不是数组您使用的btn_1是变量btn_1不是字符串文字“btn_1”变量btn1的值是多少?您是指字符串文字btn1吗?这里是数组中的示例,尽管语法很差。返回的内容正是这样:{项目:200000,00,成本:票价:2500,tname1:test,btn1:true,tname2:,tname3:,tname4:,tname5:test,btn5:true,tname6:test,btn6:true,tname7:,tname8:,tname9:,tname10:,tname11:,tname12:,tname13:,tname14:,tname15:,tname16:,tname17:,tname18:,tname19:,end:0,winner:}当然,这与此无关;如果jQuery.inaraybtn1、jQuery.parseJSONdata>-1,请尝试使用jQuery.parseJSON{True是真实的……而且大部分是任意的。我只需要元素本身就可以了解这件事的真相。字符串、布尔值、int或float将用于低占位符的用途。还有,huzza!我在代码中到处寻找那个流氓下划线。似乎我的JSFiddle被处理得太多了……甚至不够删除代码中的下划线并没有进入测试。现在仔细看看。感谢到目前为止的指导。:这是一个旁白。真正的问题也突出了。谢谢。我需要一些时间来应用您的建议。:先生,您刚刚安排了6小时的facepalm/head desk会议。非常感谢。