2

渡そうとしている配列:

var params = [];
params['request'] = "movies";
params['param'] = [];
params['param']['sortBy'] = "title";
params['param']['sortOrder'] = "asc";

Ajax呼び出し:

return $.ajax({
        type: "POST",
        url: "http://192.168.0.100:83/getData.php",
        cache:false,
        data: params,
        dataType:"json",
        success: function(data){
            if(data != null){
                            console.log(data);
                        }

問題は、phpスクリプトが$ _POST ['request']のみを受け取り、paramsが存在しないことです。

ajax呼び出しの前にコンソールログでparams配列を表示すると、次のように表示されます。

[request: "movies", param: Array[0]]
length: 0
param: Array[0]
length: 0
sortBy: "title"
sortOrder: "asc"
__proto__: Array[0]
request: "movies"
__proto__: Array[0]

問題は、「param」パラメーターが空であると見なされるために渡されないことである可能性があります(少なくとも、ajax呼び出しに渡される前は渡されません)が、なぜこれが発生するのかわかりません。ここで何が欠けていますか?

4

2 に答える 2

3

params配列として宣言しましたが、表記[]を使用してオブジェクトプロパティを割り当てました。["string"]これにより、Arrayオブジェクトに追加のプロパティが追加された空の配列が生成されました。

代わりに、別のオブジェクトリテラルが内部にネストされたオブジェクトリテラルとして宣言されている必要があります。

var params = {
  request: "movies",
  param: {
    sortBy: "title",
    sortOrder: "asc"
  }
};

の構造は次の$_POSTようになります。

Array
(
    [request] => movies
    [param] => Array
        (
            [sortBy] => title
            [sortOrder] => asc
        )

)
于 2012-12-16T19:36:28.643 に答える
2

データをJSONとして送信し、次を使用してphpでデコードできますjson_decode()

$.ajax({        
        data: { paramData: JSON.stringify( params),
       /* other ajax options*/

})

次に、phpでそれを受け取ります:

$params= json_decode($_POST['paramData']); 
echo $params['request']; /* should return "movies" as response*/

JSONメソッドをサポートしていない古いブラウザ用のjson2.jsライブラリを含める

編集:少しテストした後、paramsをオブジェクトに変更し、params.paramをオブジェクトに変更する必要があります。に変更[]すると、{}これが達成されます。

 var params = {};
 params['request'] = "movies";
 params['param'] = {};
 params['param']['sortBy'] = "title";
 params['param']['sortOrder'] = "asc";

デモ:http://jsfiddle.net/germk/2/

于 2012-12-16T19:32:00.143 に答える