无法检查从json编码的php数组准备的javascript json中的对象值

时间:2014-10-08 12:25:32

标签: javascript php arrays json

服务器端代码

$NATIVE_TEST_TEMPLATE_IDS = array(145);

将PHP数组分配到javascript中的客户端代码 -

var nativetestTemplates = "<?php echo json_encode($NATIVE_TEST_TEMPLATE_IDS); ?>"; //PHP array into JSON.

但是现在,我在这里的JSON对象nativetestTemplates看起来并不准备进行Object实例检查。我需要检查对象nativetestTemplates中是否存在145。

以下是控制台日志的详细信息 -

nativetestTemplates.length -> 5 

此外,数组的各个元素具有以下内容 -

nativetestTemplates[0] -> [
nativetestTemplates[1] -> 1
nativetestTemplates[2] -> 4
nativetestTemplates[3] -> 5
nativetestTemplates[4] -> ]

那么,我做错了什么以及检查对象中是否存在元素的最佳方法是什么。

更新

在修复了Djave指出的错误后,我仍然无法检查对象nativetestTemplates中是否存在元素。

这是我的代码 -

案例1

var testAdnetworkId = $("#adnetwork_type").val(); //reading selected dropdown value
console.log("see "+$.inArray(testAdnetworkId, nativetestTemplates)+" and "+nativetestTemplates[testAdnetworkId]);

即使testAdnetworkId具有匹配值 -

,也会返回以下内容
see -1 and undefined

案例2

但是,如果我这样做 -

var testAdnetworkId = 145; //hardcoded integer val

我得到$ .inArray支票所需的输出 -

 see 0 and undefined

testAnetworkId的console.dir在案例1中给出了这个 -

0“1”

1“4”

2“5”

但是在案例2中,它给出了 -

0 145

可以,有人请解释在案例1中进行对象属性检查的正确方法(读取选择下拉列表的值)

2 个答案:

答案 0 :(得分:3)

不要用引号括起来,你说

var nativetestTemplates = "[145]";

你想要它说

var nativetestTemplates = [145];

因此,您的代码将为:

var nativetestTemplates = <?php echo json_encode($NATIVE_TEST_TEMPLATE_IDS); ?>; //PHP array into JSON.

您获得奇怪输出([12等)的原因是Javascript只是找到字符 0,1 ,字符串开头的2个字符,而不是数组开头的

修改

有趣的是它同样的问题,你再次混淆你的变量类型。因为您正在获得(我想象的)输入字段的val(),所以您正在寻找字符串

console.log(typeof($("#adnetwork_type").val())); // Logs 'string'

不要担心,你可以解决这个问题。

var testAdnetworkId = parseInt($("#adnetwork_type").val()); //reading selected dropdown value

parseInt()是你的朋友。它会尽力用一个数字替换一个字符串或其他变量,这就是你想要的。你会在这里http://codepen.io/EightArmsHQ/pen/Kjgfh看到它有效。

有关变量类型的更多信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Values,_variables,_and_literals

答案 1 :(得分:0)

你需要在javascript中解析json变量,如下所示:

nativetestTemplates = JSON.parse(nativetestTemplates);

现在nativetestTemplates.length会给你正确的结果。