2013-11-29 48 views
3

我試圖通過jQuery.ajax將JavaScript數組發送到PHP頁面,但數組僅使用空值發送。如何通過jQuery.ajax將JavaScript數組發送到PHP?

如果我在Chrome上打開F12控制檯並檢查JS對象,它就在那裏。全部填滿。但是當我使用ChromePhp工具記錄PHP變量時,它只顯示空白值(另外,如果我遍歷php數組,回顯它的值,我得到所有空白)。

我在這裏深感困惑。

這裏去我的示例代碼:

<?php 
include 'ChromePhp.php'; 
if (isset($_GET['newUsers'])) { 
    $newUsers = $_GET['newUsers']; 
    ChromePhp::log($newUsers); 
} else { ?> 

<html> 
<body> 

    <script src="js/jquery-2.0.3.min.js"></script> 
    <script type="text/javascript"> 
     var newUsers = []; 

     newUser = []; 
     newUser['nome'] = 'alvaro'; 
     newUser['idade'] = '34'; 
     newUsers.push(newUser); 

     newUser1 = []; 
     newUser1['nome'] = 'bia'; 
     newUser1['idade'] = '7'; 
     newUsers.push(newUser1); 

     newUser2 = []; 
     newUser2['nome'] = 'alice'; 
     newUser2['idade'] = '2'; 
     newUsers.push(newUser2); 

     $.ajax({ 
      url: "testcookie.php", 
      type: "GET", 
      data: { 
       'newUsers[]': newUsers 
      } 
     }); 

    </script> 
</body> 
</html> 
<?php } ?> 

更新基於第一評論。現在我開始傳遞對象,但不知道如何讀取它的屬性。已經嘗試過$ user ['nome']但沒有結果。

<?php 
include 'ChromePhp.php'; 

if (isset($_POST['newUsers'])) { 

    $newUsers = $_POST['newUsers']; 

    foreach ($newUsers as $user) { 
     # code... 
     # HOW DO I READ THE nome AND idade VALUES HERE? 
    } 

} else { ?> 

<html> 
<body> 

    <script src="js/jquery-2.0.3.min.js"></script> 
    <script type="text/javascript"> 
     //var newUsersObj = {}; 
     var newUsers = []; 

     newUser = {}; 
     newUser['nome'] = 'alvaro'; 
     newUser['idade'] = '34'; 
     newUsers.push(newUser); 

     newUser1 = {}; 
     newUser1['nome'] = 'bia'; 
     newUser1['idade'] = '7'; 
     newUsers.push(newUser1); 

     newUser2 = {}; 
     newUser2['nome'] = 'alice'; 
     newUser2['idade'] = '2'; 
     newUsers.push(newUser2); 

     $.ajax({ 
      url: "testcookie.php", 
      type: "POST", 
      data: { 
       'newUsers[]': newUsers 
      }, 
      success: function() { 

      }, 
      error: function() { 

      } 
     }); 

    </script> 
</body> 
</html> 
<?php } ?> 
+0

,您是否試圖透過JSON.stringify(newusers使用); ? – Hellgorithm

+2

所有'newUser'對象都應該用'{}'初始化,因爲它們是**不是**數組 – Phil

+0

它的工作原理@Phil!我只需要弄清楚如何閱讀PHP上的JavaScript對象。 :) –

回答

3

明白了!

要正確訪問PHP中的JavaScrtip對象,我需要JSON.stringify當他們推入數組。然後,在PHP上,使用' - >'運算符訪問它們的屬性。

最終的解決方案如下:

<?php 
include 'ChromePhp.php'; 

if (isset($_POST['newUsers'])) { 

    $newUsers = $_POST['newUsers']; 

    foreach ($newUsers as $user) { 
     # code... 
     $usr = json_decode($user); 
     ChromePhp::log("Nome: " . $usr->nome . " - Idade: " . $usr->idade); 
    } 

} else { ?> 

<html> 
<body> 

    <script src="js/jquery-2.0.3.min.js"></script> 
    <script type="text/javascript"> 
     //var newUsersObj = {}; 
     var newUsers = []; 

     newUser = {}; 
     newUser['nome'] = 'alvaro'; 
     newUser['idade'] = '34'; 
     newUsers.push(JSON.stringify(newUser)); 

     newUser1 = {}; 
     newUser1['nome'] = 'bia'; 
     newUser1['idade'] = '7'; 
     newUsers.push(JSON.stringify(newUser1)); 

     newUser2 = {}; 
     newUser2['nome'] = 'alice'; 
     newUser2['idade'] = '2'; 
     newUsers.push(JSON.stringify(newUser2)); 

     $.ajax({ 
      url: "testcookie.php", 
      type: "POST", 
      data: { 
       'newUsers[]': newUsers 
      }, 
      success: function() { 

      }, 
      error: function() { 

      } 
     }); 

    </script> 
</body> 
</html> 
<?php } ?> 
4

只要傳遞數組或對象,jQuery將自動陣列或對象到適當PARAMS轉換,像= [1,2] - >一個[] = 1 &一個[] = 2

data: { 
    'newUsers': newUsers 
} 

內部功能,做到這一點,是http://api.jquery.com/jQuery.param/