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);

または、リクエストのrequest-methodを設定することもできます。私は少し怠惰で、その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.stringify(fullName)}

GETまたはを使用してキーと値のペアを送信POSTしているため、値を正しくエンコードする必要があります。

あなたはそれを使用してそれを行うことができます:

{names : encodeURIComponent(JSON.stringify(fullName))}
于 2013-02-26T22:03:05.623 に答える
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

試す

$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

これを試してください。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"]}

//したがって、2番目は渡すのに正しいjson文字列だと思います

于 2013-02-26T22:51:12.353 に答える