尽管json数组中存在元素,但jQuery.inArray条件返回false

时间:2014-01-02 10:21:34

标签: php jquery json

我正在尝试做的是调用从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编码的数组,该数组随后被传递给调用脚本并被调用脚本接收。我的元素检查未能找到我知道的数组。我在俯瞰什么?

1 个答案:

答案 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(); ...