Json形式のデータをphpに送信し、phpで何らかの操作を行いたいと思います。私の問題は、Ajaxを介してPHPファイルにJSONデータを送信できないことです。私はこの方法を試しました。
<script>
$(function (){
$("#add-cart").click(function(){
var bid=$('#bid').val();
var myqty=new Array()
var myprice=new Array()
qty1=$('#qty10').val();
qty2=$('#qty11').val();
qty3=$('#qty12').val();
price1=$('#price1').val();
price2=$('#price2').val();
price3=$('#price3').val();
var postData =
{
"bid":bid,
"location1":"1","quantity1":qty1,"price1":price1,
"location2":"2","quantity2":qty2,"price2":price2,
"location3":"3","quantity3":qty3,"price3":price3
}
var dataString = JSON.stringify(postData);
$.ajax({
type: "POST",
dataType: "json",
url: "add_cart.php",
data: {myData:dataString},
contentType: "application/json; charset=utf-8",
success: function(data){
alert('Items added');
},
error: function(e){
console.log(e.message);
}
});
});
});
</script>
そしてPHP私は使用します:
if(isset($_POST['myData'])){
$obj = json_decode($_POST['myData']);
//some php operation
}
Phpファイルにprint_r($ _ POST)を追加すると、firebugにarray(0){}が表示されます。
contentType: "application/json; charset=utf-8",
を失います。 JSONをサーバーに送信するのではなく、通常のPOST=クエリ(たまたまJSON文字列を含む)を送信しています。
それはあなたが持っているものを作るはずです。
つまり、JSON.stringify
またはjson_decode
をここで使用する必要はまったくありません。ただやる:
data: {myData:postData},
次に、PHPで:
$obj = $_POST['myData'];
$_POST
にはフォームデータが事前に入力されています。
JSONデータ(または生の入力)を取得するには、 php://input
。
$json = json_decode(file_get_contents("php://input"));
Jsonとajaxを使用してjavascript objをphpに送信するには:
js:
var dataPost = {
"var": "foo"
};
var dataString = JSON.stringify(dataPost);
$.ajax({
url: 'server.php',
data: {myData: dataString},
type: 'POST',
success: function(response) {
alert(response);
}
});
pHPでそのオブジェクトを使用するには:
$obj = json_decode($_POST["myData"]);
echo $obj->var;
$_POST
変数を介して値を取得する場合では、contentTypeを"application/json"
として指定するのではなく、デフォルトの"application/x-www-form-urlencoded; charset=UTF-8"
を使用する必要があります。
JavaScript:
var person = { name: "John" };
$.ajax({
//contentType: "application/json", // php://input
contentType: "application/x-www-form-urlencoded; charset=UTF-8", // $_POST
dataType : "json",
method: "POST",
url: "http://localhost/test/test.php",
data: {data: person}
})
.done(function(data) {
console.log("test: ", data);
$("#result").text(data.name);
})
.fail(function(data) {
console.log("error: ", data);
});
PHP:
<?php
// $_POST
$jsonString = $_POST['data'];
$newJsonString = json_encode($jsonString);
header('Content-Type: application/json');
echo $newJsonString;
JavaScriptからPHPにJSONを送信したい場合:
JavaScript:
var person = { name: "John" };
$.ajax({
contentType: "application/json", // php://input
//contentType: "application/x-www-form-urlencoded; charset=UTF-8", // $_POST
dataType : "json",
method: "POST",
url: "http://localhost/test/test.php",
data: person
})
.done(function(data) {
console.log("test: ", data);
$("#result").text(data.name);
})
.fail(function(data) {
console.log("error: ", data);
});
PHP:
<?php
$jsonString = file_get_contents("php://input");
$phpObject = json_decode($jsonString);
$newJsonString = json_encode($phpObject);
header('Content-Type: application/json');
echo $newJsonString;
私はあなたがこのような何かを試すことができると信じています:
var postData =
{
"bid":bid,
"location1":"1","quantity1":qty1,"price1":price1,
"location2":"2","quantity2":qty2,"price2":price2,
"location3":"3","quantity3":qty3,"price3":price3
}
$.ajax({
type: "POST",
dataType: "json",
url: "add_cart.php",
data: postData,
success: function(data){
alert('Items added');
},
error: function(e){
console.log(e.message);
}
});
jsonエンコードは自動的に行われ、投稿のダンプは次のようになります。
array(
"bid"=>bid,
"location1"=>"1",
"quantity1"=>qty1,
"price1"=>price1,
"location2"=>"2",
"quantity2"=>qty2,
"price2"=>price2,
"location3"=>"3",
"quantity3"=>qty3,
"price3"=>price3
)
削除するだけです:
...
//dataType: "json",
url: "index.php",
data: {myData:postData},
//contentType: "application/json; charset=utf-8",
...
あなたはjsオブジェクト形式でjs配列を送信しようとしています。
使用する代わりに
var a = new array();
a['something']=...
試してください:
var a = new Object();
a.something = ...
私はそれがしばらくしていたことを知っていますが、誰かがまだそれを必要とする場合に備えて:
渡す必要があるJSONオブジェクト:
0:{CommunityId: 509, ListingKey: "20281", Type: 10, Name: "", District: "", Description: "",…}
1:{CommunityId: 510, ListingKey: "20281", Type: 10, Name: "", District: "", Description: "",…}
Ajaxコード:
data: JSON.stringify(The-data-shows-above),
type: 'POST',
datatype: 'JSON',
contentType: "application/json; charset=utf-8"
そしてPHP side:
json_decode(file_get_contents("php://input"));
それは私のために働く、それが役立つことを願っています!