3

我有一个要传递给 PHP 的 JSON 数组。最终,我将从我的 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() 提供的参数无效”

4

6 回答 6

1

json_decode()不返回数组。要让它这样做,你需要这样做json_decode($_REQUEST['names'], true)

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

于 2013-02-27T00:38:29.183 回答
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

于 2013-02-26T22:58:22.213 回答
0

尝试

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

代替

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

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

于 2013-02-26T22:33:20.420 回答
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。

于 2013-02-26T22:23:56.533 回答
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字符串传递

于 2013-02-26T22:51:12.353 回答
0

使用时似乎发生了一些奇怪的事情:

{names : JSON.stringify(fullName)}

GET当您使用or发送键值对POST时,您可能需要正确编码值。

你可以这样做:

{names : encodeURIComponent(JSON.stringify(fullName))}
于 2013-02-26T22:03:05.623 回答