2012-06-08 3 views
21

Я хочу отправить некоторые данные в формате json в php и выполнить некоторую операцию в php. Моя проблема в том, что я не могу отправить данные json через ajax в файл php. Пожалуйста, помогите мне, как я могу это сделать. Я попробовал этот способ ..Отправка JSON на PHP с помощью ajax

<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) {} в поджигатель.

+0

Удалить приложение contentType: application/json; charset = utf-8 ",'. –

ответ

32

Потерять contentType: "application/json; charset=utf-8",. Вы не отправляете JSON на сервер, вы отправляете обычный запрос POST (который содержит строку JSON).

Это должно сделать то, что у вас есть.

Дело в том, что здесь не нужно использовать JSON.stringify или json_decode. Вобще:

data: {myData:postData}, 

Тогда в PHP:

$obj = $_POST['myData']; 
+0

Так что, если я отправляю json на сервер Как его получить? И почему он отличается от MVC.NET? – Ayyash

+0

@Ayyash: Если вы отправляли JSON, вам нужно было бы прочитать исходные входные данные (из 'php: // input'). Я ничего не знаю о MVC.NET, поэтому я не могу ответить на это. –

+0

или, может быть, проблема с IIS vs Apache? Я использую одну и ту же функцию ajax в обоих случаях, но в .NET я просто захватил Request.Post, в PHP, который не работает, и по какой-то причине не был введен php: //, единственное, что работало, - это передать атрибуты строки запроса и используя $ _REQUEST ... что болит – Ayyash

13

Это потому, что $_POST предварительно заполнен данными формы.

Чтобы получить данные JSON (или любой необработанный ввод), используйте php://input.

$json = json_decode(file_get_contents("php://input")); 
+0

Если бы я собирался сделать это, я бы не использовал jQuery для одного. Для другого я бы делал все вручную. –

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 кодирования должно произойти автоматически, и дамп вашего поста должен дать вам примерно следующее:

array(
    "bid"=>bid, 
    "location1"=>"1", 
    "quantity1"=>qty1, 
    "price1"=>price1, 
    "location2"=>"2", 
    "quantity2"=>qty2, 
    "price2"=>price2, 
    "location3"=>"3", 
    "quantity3"=>qty3, 
    "price3"=>price3 
) 
+0

Потерять приложение contentType:/json; charset = utf-8 ",'. Вы 'POST'ируете стандартную строку запроса, а не JSON. Затем 'print_r ($ _ POST)' должен дать вам массив, который вы показываете. –

2

просто удалить:

... 
//dataType: "json", 
url: "index.php", 
data: {myData:postData}, 
//contentType: "application/json; charset=utf-8", 
... 
+1

Вероятно, вы должны сохранить 'dataType:" json ",', это тип данных, который возвращает сервер. –

+0

Да, это правда, но json должен быть возвращен, чтобы избежать другой ошибки –

+0

Я предполагаю, что OP возвращает JSON, но просто не показал этого. Я не думаю, что была бы ошибка, если вы ничего не вернули. Вы получили бы только ошибку, если бы вы не были JSON. –

1

Вы tryng отправить Js массив JS формат объекта.

Вместо использования

var a = new array(); 
a['something']=... 

попробовать:

var a = new Object(); 
a.something = ... 
6

Чтобы отправить 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; 
Смежные вопросы