循环通过JSON数组

时间:2013-02-26 21:06:56

标签: php javascript ajax arrays json

我有一个JSON数组,我正在传递给PHP。最终我将从我的PHP文件传递和接收更多,但目前这就是它。现在它正在接收1个阵列并发送回相同的阵列,没问题。我可以循环遍历Javascript中的数据,但是如何遍历我传递给我的PHP文件的数组?我得到foreach的错误,for循环似乎没有任何帮助。建议?

的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()提供的参数无效”

6 个答案:

答案 0 :(得分:1)

json_decode()不会返回数组。要做到这一点,你需要做json_decode($_REQUEST['names'], true)

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

答案 1 :(得分:0)

使用时似乎有些奇怪的事情:

{names : JSON.stringify(fullName)}

在使用GETPOST发送键值对时,您可能需要正确编码值。

您可以使用以下方式执行此操作:

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

答案 2 :(得分: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的单独值。

答案 3 :(得分:0)

尝试

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

而不是

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

由于php.ini conf,有时$ _REQUEST可能为空。见request_order

答案 4 :(得分: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"]"}

但是

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

//所以我猜第二个是正确的json字符串传递

答案 5 :(得分: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默认值要得到)。最佳做法是使用FireBug并检查它的网络面板,尤其是XHR选项卡。可能问题应该是:“如何使用XHR调试器?”因为这根本没什么大不了的。

似乎jQuery API略有更新(参见弃用通知):

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

https://getfirebug.com