2013-02-26 521 views
3

我有一個JSON數組,我傳遞給PHP。最終我會傳遞並從我的PHP文件中獲得更多,但現在就是這樣。現在它接收1個數組併發回相同的數組,沒問題。我可以通過Javascript中的數據循環,但我如何循環通過我傳遞給我的PHP文件的數組?我用foreach得到錯誤,for循環似乎沒有任何幫助。建議?通過JSON數組循環

的Javascript

var fullName = ["John Doe", "Jane Doe"]; 

$(window).load(function(){ 
    getList(); 
}); 

function getList(){ 
    $.getJSON(
     "names.php", 
     {names : JSON.stringify(fullName)}, 
     function(data) 
     { 
      for(var i = 0; i < data.test.length; i++) 
      { 
       window.alert(data.test[i]); 
      } 
     } 
    ); 
} 

PHP

<?php 
    $names=json_decode($_REQUEST['names']); 

foreach($names as $name) 
{ 
    echo $name; 
} 

    $data['test'] = $names; 
    echo json_encode($data); 

在foreach錯誤出在的foreach線告訴我 「警告:的foreach提供了無效的參數()」

+0

你與for循環得到哪些錯誤?同時也請發佈收到的JSON(在開發工具的網絡面板上檢查它) – Bergi 2013-02-26 21:11:02

+0

@Bergi告訴我有一個無效的參數。我將使用其中的foreach更新我的代碼。 – 2013-02-26 21:12:32

+1

在你的PHP中,'$ names'應該是一個數組。閱讀它有什麼問題? – 2013-02-26 21:13:59

回答

1

json_decode()不返回數組。爲了得到它這樣做你需要做的json_decode($_REQUEST['names'], true)

http://php.net/manual/en/function.json-decode.php

+0

這是真的,但由於示例數據看起來像它已經是一個數組。 – 2013-02-27 00:41:34

0

有在使用時似乎很奇怪:

{names : JSON.stringify(fullName)} 

當您使用GETPOST發送鍵 - 值對時,您可能需要正確編碼該值。

你能做到這一點使用:

{names : encodeURIComponent(JSON.stringify(fullName))} 
+0

仍然沒有運氣。我的'var_dumps'仍然顯示NULL。也許我需要使用不同的Ajax方法。 – 2013-02-26 22:05:43

0

編輯:jQuery是再次被瘋狂。

$.getJSON("names.php?names=" + encodeURIComponent(JSON.stringify(fullName)), function(data) 
     { 
       for(var i = 0; i < data.test.length; i++) 
       { 
         window.alert(data.test[i]); 
       } 
     } 
); 

的問題是它是在數組作爲單獨的值,以在URI添加每個項目。

+0

沒有這個運氣。它甚至打破了本來可以工作的警報(儘管它不應該) – 2013-02-26 22:31:18

0

嘗試

$names=json_decode($_POST['names']); // or $_GET 

,而不是

$names=json_decode($_REQUEST['names']); 

有時候$ _REQUEST可以因爲php.ini中的conf的是空的。查閱request_order

0

試試這個, 在你的JavaScript函數

{names : JSON.stringify(fullName)}, 

"{names :"+ JSON.stringify(fullName) +"}", 

調試測試

var fullName = ['John Doe', 'Jane Doe']; 
console.log({names : JSON.stringify(fullName)}); 
// gives Object { names="["John Doe","Jane Doe"]"} 

但機智代替線以下^ h

console.log("{names :"+ JSON.stringify(fullName) +"}"); 
// gives {names :["John Doe","Jane Doe"]} 

//所以我想第二個是正確的JSON字符串傳遞

+0

當我按照建議使用'console.log'時,我得到了'{names:[「John Doe」,「Jane Doe」]}'但是在我的PHP中,當我var_dump時,我仍然收到空值。 – 2013-02-26 22:55:12

+0

好吧,回顧一下,我們將暫時刪除全名數組,並傳遞{names:「my test name1」},並檢查您在php腳本中是否獲得了正確的值。如果你得到正確的值,這意味着我們已經確定了數組到json字符串的問題。否則還有一些其他問題 – Shridhar 2013-02-26 23:34:52

+0

PHP中仍然沒有任何東西,全部爲空。必須有一些真正的錯誤,但我之前使用過類似的腳本。我只是想從頭開始嘗試下面提到的ajax方法... – 2013-02-26 23:58:49

0
/* client-side */ 
$.ajax({ 

    /* the request's method: */ 
    type: 'GET', 

    /* the request's location: */ 
    url:'/names.php', 

    /* the request's fields: */ 
    data: JSON.stringify({names: fullName}), 

    /* the request's content-type : */ 
    contentType: 'application/json; charset=utf-8', 

    /* the response's content-type: */ 
    dataType:'json', 

    /* the callback function */ 
    success: function(json){ 

    if(json.length > 0){ 
     $.each(json, function(i, v){ 

      console.info(v); 

     }); 
     } 
     else { 
     alert('wtf?!'); 
     } 
}); 

/* server-side */ 
$req=array_merge($_GET, $_POST); 

// die(print_r($req)); 

$names=json_decode($req['names']); 
header('content-type: application/json; charset=utf8;'); 
echo json_encode($names); 

另外一個可以設置請求方法的要求,我只是有點懶,並與array_merge ()它只是無關緊要,如果請求是一個POST或GET(以及函數$ .ajax默認爲GET)。最佳做法是使用FireBug並檢查它的網絡面板,尤其是XHR選項卡。可能這個問題應該是:「如何使用XHR調試器?」因爲這根本就沒有什麼棘手的。

看來,jQuery的API已略有更新(見棄用通知):

http://api.jquery.com/jQuery.ajax/

https://getfirebug.com

+0

也試過這個,似乎沒有工作。 – 2013-03-07 03:32:05

+0

如果FireBug不起作用......你必須錯過一些基本的東西。 此代碼及以上發佈的代碼應該「工作」 - 至少將任何東西記錄到JS控制檯。 – 2013-03-07 13:46:45

+0

除了「不起作用」不被視爲錯誤描述......雖然你不知道請求錯誤的確切位置 - 這只是猜測。至少它是一個示例,如何爲請求和響應創建正確的頭文件...以及FireBug(應該)詳細顯示發生了什麼。 – 2013-03-07 13:48:47