PHP5.5
ajax JSON 形式のPOST送信で複数の配列のデート送信したいのですが複数のデータを送りたい場合は、どうした良いのでしょうか?
例)
{
“_id”: “12345",
“edate”: “2018-03-14 15:49:15",
“code”: “c01",
“jan”: “j01",
}
{
“_id”: “12345",
“edate”: “2018-03-14 15:49:15",
“code”: “c02",
“jan”: “j02",
}
上記のデータがあるとして複数のデータ(もっと増える場合あり)を
https://hoge.jpに送信したい場合の処理を誰かわかる方がいましたらご教授お願い致します。
足らない情報があれば、追加致します。
どうかよろしくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
ajax JSON 形式のPOST送信で複数の配列のデート送信したいのですが
この一文からJSONを何か別のモノと勘違いしているように思えます。
JSONというのはHTMLやCSVなどと一緒で、単なる文字列の集合体です。
HTMLがタグ<xxx>
というもので木構造を管理するツリー形式の文書、
CSVが改行文字でレコードを、カンマでカラムを区切る二次元テーブルの文書であるように、
JSONはJavaScriptのコードにベタッと貼り付けるだけで、JavaScriptが一つの値として認識してくれる程使い勝手の良い「文字列」であるだけです。
JavaScriptにはJSONというライブラリが存在するので、
それを使って文字列に固めれば良いのです。
JSONは一つの値になる情報しか扱えませんし、
PHP側も受け取ったデータがいくつ情報があるのか分かりませんので、
複数の情報を扱う場合は配列として定義しましょう。
具体的なコードは下記2つのサイトをサンプルとして起こしました
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
http://js.studio-kingdom.com/jquery/ajax/ajax
JavaScript
1var postData = [ 2 { 3 “_id”: “12345", 4 “edate”: “2018-03-14 15:49:15", 5 “code”: “c01", 6 “jan”: “j01", // ここの行末のカンマはIE11だと多分エラーになります 7 }, 8 { 9 “_id”: “12345", 10 “edate”: “2018-03-14 15:49:15", 11 “code”: “c02", 12 “jan”: “j02", // ここの行末のカンマはIE11だと多分エラーになります 13 } 14]; 15$.ajax({ 16 type: "POST", 17 url: "some.php", 18 data: { data: JSON.stringify(postData) } 19}).done(function( msg ) { 20 console.log(msg); 21});
今回のコードではAjaxのDataキーにセットしたので、
PHP側では$_POST['data'}
で受け取れるでしょう。
JSONは動的型付け言語であるPHPとも相性が良いのですが、
オブジェクトより連想配列の方が一般的に受け入れられています。
従って、第二引数のオプションを変更してオブジェクトを連想配列で受け取るようにした方が一般的でしょう。
http://php.net/manual/ja/function.json-decode.php
PHP
1<?php 2$data = json_decode($_POST['data'], true); 3var_dump($data); 4echo 'true';
この1文が引っかかるのですが、異なるドメインへのAjax通信でしょうか?
その場合はセキュリティ上デフォルトでは許されていませんので、別途勉強と対策が必要になります。
その名もCORSです。
まぁ要するに、貴方がオンライン銀行にログインしました。
その後に私のWebサイトにアクセスしました。
私はオンライン銀行から振込を行うAjax通信を作成して発行しました。
貴方はいつの間にか自分の口座からお金が抜き取られてしまいました・・・・・・
こういう事を未然に防ぐ為に、基本的にWebサーバというのは別のドメインからのAjaxクエリを受け付けない設定になっています。
特にお金を扱うWebサービスはガードが厳しく、ログインしっぱなしで他のサイトを訪れたからといって勝手に振込されるというケースはまず起こりえません。
もし貴方が2サイトを利用している場合、どうしてもクロスドメインでAjax通信を行わなければならない要望があるかもしれません。
その時はCORSの設定を思い出して、PHP側に相互のAjax通信を許可する設定に変更してください。
投稿2018/04/01 05:26
編集2018/04/01 05:30総合スコア21158
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/04/01 05:34
2018/04/01 06:15
退会済みユーザー
2018/04/01 06:18
退会済みユーザー
2018/04/01 06:19
0
import axios from 'axios'; const url = 'https://jsonplaceholder.typicode.com/posts/'; const payload = [ { title: 'foo', body: 'bar', userId: 1 }, { title: 'foo', body: 'bar', userId: 1 } ] axios .post(url, payload); //自動的にjsonに変換されます .then(data => console.log(data)) .catch(error => console.error(error))
情報が少ないので、とりあえず、ES6、axios前提で動くコードを載せときます。
投稿2018/04/01 04:29
編集2018/04/01 04:35総合スコア2415
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/01 04:46
2018/04/01 04:50
0
配列にして送れば良いのでは?
[{
“_id”: “12345",
“edate”: “2018-03-14 15:49:15",
“code”: “c01",
“jan”: “j01",
},
{
“_id”: “12345",
“edate”: “2018-03-14 15:49:15",
“code”: “c02",
“jan”: “j02",
}]
投稿2018/04/01 04:15
編集2018/04/01 04:18総合スコア2404
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。