2013-11-29 47 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/