Отправка JSON на PHP с помощью ajax
Я хочу отправить некоторые данные в формате json в php и выполнить некоторую операцию в php. Моя проблема в том, что я не могу отправить данные json через ajax в файл php. Пожалуйста, помогите мне, как я могу это сделать. Я пробовал этот путь.
<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
}
Когда вы добавляете print_r ($ _ POST) в php файл, он показывает массив (0) {} в firebug.
Ответы
Ответ 1
Потеряйте contentType: "application/json; charset=utf-8",
. Вы не отправляете JSON на сервер, вы отправляете обычный запрос POST (который содержит строку JSON).
Это должно сделать то, что у вас есть.
Дело в том, что здесь вообще не нужно использовать JSON.stringify
или json_decode
. Просто выполните:
data: {myData:postData},
Затем в PHP:
$obj = $_POST['myData'];
Ответ 2
Это потому, что $_POST
предварительно заполняется данными формы.
Чтобы получить данные JSON (или любой исходный ввод), используйте php://input
.
$json = json_decode(file_get_contents("php://input"));
Ответ 3
Чтобы отправить javascript obj в php с помощью json и ajax:
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;
Ответ 4
Я думаю, вы могли бы попробовать что-то вроде этого:
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 encode должен произойти автоматически, а свалка вашего сообщения должна дать вам что-то вроде:
array(
"bid"=>bid,
"location1"=>"1",
"quantity1"=>qty1,
"price1"=>price1,
"location2"=>"2",
"quantity2"=>qty2,
"price2"=>price2,
"location3"=>"3",
"quantity3"=>qty3,
"price3"=>price3
)
Ответ 5
просто удалите:
...
//dataType: "json",
url: "index.php",
data: {myData:postData},
//contentType: "application/json; charset=utf-8",
...
Ответ 6
Вы пытаетесь отправить массив js с js-объектом.
Вместо использования
var a = new array();
a['something']=...
попробовать:
var a = new Object();
a.something = ...