2012-06-08 75 views
21

我想发送一些json格式的数据到php,并在php中做一些操作。我的问题是我不能通过ajax发送json数据到我的php文件。请帮我,我该怎么做。我曾尝试这样..使用ajax发送JSON到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 
} 

在php文件当添加的print_r($ _ POST),它显示阵列(0){}在萤火虫。

+0

删除'contentType:“application/json; charset = utf-8“,'。 –

回答

32

失去contentType: "application/json; charset=utf-8",。你没有发送JSON到服务器,你发送一个普通的POST查询(恰好包含一个JSON字符串)。

这应该使你有工作。

事情是,你根本不需要使用JSON.stringifyjson_decode。只要做到:

data: {myData:postData}, 

然后在PHP中:

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

那么,如果我将json发送到服务器?我如何接收它?为什么它与MVC.NET有所不同? – Ayyash

+0

@Ayyash:如果您要发送JSON,则必须读取原始输入数据(来自'php:// input')。对于MVC.NET一无所知,所以我无法回答。 –

+0

或者也许它是一个IIS与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:“application/json; charset = utf-8”,'。你是一个标准的查询字符串,而不是JSON。然后'print_r($ _ POST)'应该给你显示的数组。 –

2

只是删除:

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

您应该保留'dataType:“json”,',这是服务器返回的数据类型。 –

+0

是它的真实,但必须返回json以避免另一个错误 – 2012-06-08 20:01:10

+0

我假设OP正在返回JSON,但只是没有显示。我不认为如果你什么都没有返回就会出现错误。如果你返回的不是JSON,你只会得到一个错误。来自[这里](http://api.jquery.com/jQuery.ajax/)的 –

1

你是tryng发送与js对象格式的js数组。

而是使用

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

尝试:

JS:

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

要使用JSON和Ajax发送的JavaScript obj转换为PHP

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;