我正在尝试做的是调用从mysql加载数据到通过jQuery调用的php然后json_encode
数组并通过header('Content-type: application/json')
将其发送到jQuery函数随后将数组作为数据处理,以更新页面上的特定元素。
我正处于最后一圈,让jQuery进行调用,php访问数据库并将数据作为json数组发送回主页,并使用新数据更新大部分元素。我遇到的问题是分析数组中一个元素的特定属性:确定数组中是否存在指定元素,如果存在,则禁用和隐藏输入元素。
调用返回的是“btn1:true”(“true”是一个任意值),无论我如何检查它的存在,inArray给我一个-1,意思是,即使它正在制作它作为数组的一个元素,我的代码无法找到它。
以下是进行调用并处理传入数据的代码:
<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>
这是JSFiddle,虽然没有准确理解数组的格式,但在这里获得积极的结果并没有帮助。
这是调用从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编码的数组,该数组随后被传递给调用脚本并被调用脚本接收。我的元素检查未能找到我知道的数组。我在俯瞰什么?
答案 0 :(得分:0)
一些事情。使用getJSON
代替get
因为您获得了JSON。
$.getJSON('includes/refresh.php', function (data)...`
并且,您正在发送此数据
$divs['btn'.$i] = "true";
// which gives $divs['btn1'] = "true";
但是你使用btn1作为变量而不是字符串文字
if (jQuery.inArray(btn1, data) > -1) {
它是一个KEY而不是数组中的变量。
应该阅读
if (data.btn1) {
// or to be really specific:
// if (typeof data.btn1!='undefined' && data.btn1)
此外,虽然"true"
是真实的,"false"
也是如此,我认为你的意思是$divs['btn'.$i] = true;
另外(它不是问题的一部分,但......)
$('#btn1').prop("disabled", true);
$('#btn1').hide();
无需继续选择元素。链接命令。
$('#btn1').prop("disabled", true).hide();
每次选择它时,jQuery都必须搜索它。如果您无法链接它们,请设置一次变量。 $btn=$('#btn1');
并使用$btn1.hide(); $btn1.show(); ...
。