Я хочу отправить некоторые данные в формате 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.
Потерять contentType: "application/json; charset=utf-8",
Вы не отправляете JSON на сервер, вы отправляете обычный запрос POST (который содержит строку JSON).
Это должно сделать то, что у вас есть.
JSON.stringify
json_decode
здесь вообще не нужно использовать JSON.stringify
или json_decode
. Просто делать:
data: {myData:postData},
Затем в PHP:
$obj = $_POST['myData'];
Это потому, что $_POST
предварительно заполняется данными формы.
Чтобы получить данные JSON (или любой исходный ввод), используйте php://input
.
$json = json_decode(file_get_contents("php://input"));
Чтобы отправить javascript obj в php с помощью json и ajax:
ЯШ:
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;
Я думаю, вы могли бы попробовать что-то вроде этого:
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 )
просто удалите:
... //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 = ...