質問するログイン新規登録

回答編集履歴

4

修正

2017/02/16 01:52

投稿

masaya_ohashi
masaya_ohashi

スコア9210

answer CHANGED
@@ -45,7 +45,7 @@
45
45
  ```JavaScript
46
46
  selectQuery.dataEncode = function(data){
47
47
  if(typeof data != 'object')return false;
48
- return encodeURIComponent("entry") + "=" + encodeURIComponent(data);
48
+ return encodeURIComponent("entry") + "=" + encodeURIComponent(JSON.stringify(data));
49
49
  }
50
50
  ```
51
51
  PHP側はこうです。あと、array_mergeして$_GETと$_POSTを結合してますが、PHPには[$_REQUEST](http://php.net/manual/ja/reserved.variables.request.php)というGETとPOSTとCOOKIEをくっつけた変数が用意されています。

3

誤字修正

2017/02/16 01:52

投稿

masaya_ohashi
masaya_ohashi

スコア9210

answer CHANGED
@@ -48,7 +48,7 @@
48
48
  return encodeURIComponent("entry") + "=" + encodeURIComponent(data);
49
49
  }
50
50
  ```
51
- PHP側はこうです。あと、array_margeして$_GETと$_POSTを結合してますが、PHPには[$_REQUEST](http://php.net/manual/ja/reserved.variables.request.php)というGETとPOSTとCOOKIEをくっつけた変数が用意されています。
51
+ PHP側はこうです。あと、array_mergeして$_GETと$_POSTを結合してますが、PHPには[$_REQUEST](http://php.net/manual/ja/reserved.variables.request.php)というGETとPOSTとCOOKIEをくっつけた変数が用意されています。
52
52
  ```PHP
53
53
  $input = json_decode($_REQUEST["entry"]);
54
54
  ```

2

追記2

2017/02/16 01:29

投稿

masaya_ohashi
masaya_ohashi

スコア9210

answer CHANGED
@@ -25,4 +25,30 @@
25
25
  }
26
26
  // 半角スペースを+に変える処理はすでにencodeURIComponentがやっているので削除
27
27
  return params.join( '&' );
28
+ ```
29
+
30
+ ###追記
31
+ ご自分で書かれたコードを理解しておられないようなので1次元配列になる理由を説明します。
32
+ ```JavaScript
33
+ selectQuery.dataEncode = function(data){
34
+ if(typeof data != 'object')return false;
35
+ var params = [];
36
+ for(var idx in data){
37
+ var tmp = data[idx];
38
+ if(tmp.length < 1)return false;
39
+ params.push(idx + '=' + JSON.stringify(tmp));
40
+ }
41
+ return params.join( '&' ).replace( /%20/g, '+' );
42
+ }
43
+ ```
44
+ このdataEncodeというfunctionに渡されてくるdataという変数は、あなたの用意したentryという多次元配列です。entryの外側の配列をfor文で回して、それぞれをパラメータ化しているから"0=['test','AA123456','test','pass']&1=["test2"]&2=['test3','BB123456']"という形になるのはむしろ正しい動作です。entryの形を維持したまま渡したいのであれば、下記のようなコードが正しいです。
45
+ ```JavaScript
46
+ selectQuery.dataEncode = function(data){
47
+ if(typeof data != 'object')return false;
48
+ return encodeURIComponent("entry") + "=" + encodeURIComponent(data);
49
+ }
50
+ ```
51
+ PHP側はこうです。あと、array_margeして$_GETと$_POSTを結合してますが、PHPには[$_REQUEST](http://php.net/manual/ja/reserved.variables.request.php)というGETとPOSTとCOOKIEをくっつけた変数が用意されています。
52
+ ```PHP
53
+ $input = json_decode($_REQUEST["entry"]);
28
54
  ```

1

追記

2017/02/16 01:28

投稿

masaya_ohashi
masaya_ohashi

スコア9210

answer CHANGED
@@ -12,4 +12,17 @@
12
12
  ```PHP
13
13
  $json = $_REQUEST['data'];
14
14
  $array = json_decode($json, true); // $arrayには配列の形で格納されます
15
+ ```
16
+
17
+ ###追記
18
+ 1次元配列になってしまう原因は、yambejpさんが正解だと思います。postする内容のパラメータ名、パラメータ値はそれぞれencodeURIComponentでエンコードしてやらないと、PHP側がうまくクエリを解析できません。jQueryのajax通信など、方法によっては勝手にそのへんの処理をしてくれるのですが、XMLHttpRequestはそのあたりを自前でやらなければいけません。
19
+ ```JavaScript
20
+ for(var idx in data){
21
+ var tmp = data[idx];
22
+ if(tmp.length < 1)return false;
23
+ // ここでパラメータ名とパラメータ値をencodeURIComponentをかけておく
24
+ params.push(encodeURIComponent(idx) + '=' + encodeURIComponent(JSON.stringify(tmp)));
25
+ }
26
+ // 半角スペースを+に変える処理はすでにencodeURIComponentがやっているので削除
27
+ return params.join( '&' );
15
28
  ```