2014-10-08 103 views
0

服務器端代碼無法檢查在javascript從JSON編碼PHP數組

$NATIVE_TEST_TEMPLATE_IDS = array(145); 

客戶端代碼製備JSON來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 

控制檯。在殼體1 testAdnetworkId的DIR給出了這樣的 -

0 「1」

1 「4」

2 「5」

然而,在情況2中,它給 -

可以,有人請解釋在案例1中做對象屬性檢查的正確方法(讀取select下拉列表的值)

+1

嘗試解析它? 'var nativetestTemplates = JSON.parse(json_encoded_string);' – 2014-10-08 12:33:15

+0

在哪一步,它將如何受益?正如Djave指出的那樣,我現在糾正了這個錯誤。 – 2014-10-08 13:38:09

回答

3

不要把它包在引號,你說

var nativetestTemplates = "[145]"; 

你想讓它說

var nativetestTemplates = [145]; 

所以,你的代碼將改爲:

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

的原因,你得到奇怪的輸出([,1,2等)是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

+0

感謝您指出錯誤。但我仍然有一個問題。請檢查我的問題更新。 – 2014-10-08 13:50:56

+0

請看我更新的答案 – Djave 2014-10-13 16:42:22

0

你需要解析在JavaScript JSON變量如下:

nativetestTemplates = JSON.parse(nativetestTemplates);

現在nativetestTemplates.length會給你正確的結果。