2012-06-08 54 views
21

Tôi muốn gửi một số dữ liệu ở định dạng json sang php và thực hiện một số thao tác trong php. Vấn đề của tôi là tôi không thể gửi dữ liệu json thông qua ajax vào tập tin php của tôi. Xin vui lòng giúp tôi làm thế nào tôi có thể làm điều đó. Tôi đã thử cách này ..Gửi JSON tới PHP bằng 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> 

Và trong PHP tôi sử dụng:

if(isset($_POST['myData'])){ 
$obj = json_decode($_POST['myData']); 
//some php operation 
} 

Khi add print_r ($ _ POST) trong tập tin php, nó cho thấy mảng (0) {} trong firebug.

+0

Xóa ứng dụng 'contentType:"/json; charset = utf-8 ",'. –

Trả lời

32

Mất contentType: "application/json; charset=utf-8",. Bạn không gửi JSON tới máy chủ, bạn đang gửi một truy vấn POST bình thường (điều đó xảy ra chứa một chuỗi JSON).

Điều đó sẽ làm cho những gì bạn làm việc.

Thing là, bạn không cần phải sử dụng JSON.stringify hoặc json_decode ở đây cả. Chỉ cần làm:

data: {myData:postData}, 

Sau đó trong PHP:

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

Vì vậy, nếu tôi gửi json đến máy chủ Tại sao nó lại khác với MVC.NET? – Ayyash

+0

@Ayyash: Nếu bạn gửi JSON, bạn phải đọc dữ liệu đầu vào thô (từ 'php: // input'). 't biết bất cứ điều gì về MVC.NET, vì vậy tôi không thể trả lời đó. –

+0

hoặc có thể là vấn đề về IIS so với Apache? Tôi sử dụng cùng một chức năng ajax trong cả hai, nhưng trong .NET tôi chỉ cần lấy Request.Post, trong PHP không hoạt động, cũng không phải php: // input vì lý do nào đó, điều duy nhất làm việc là truyền các thuộc tính chuỗi truy vấn và sử dụng $ _REQUEST ... làm tổn thương – Ayyash

13

Đó là vì $_POST được điền trước dữ liệu biểu mẫu.

Để nhận dữ liệu JSON (hoặc bất kỳ đầu vào thô nào), hãy sử dụng php://input.

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

Nếu tôi định làm điều này, tôi sẽ không sử dụng jQuery, cho một cái. Cho một cái khác, tôi sẽ làm mọi thứ theo cách thủ công. –

4

Tôi tin rằng bạn có thể thử một cái gì đó như thế này:

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); 
     } 
}); 

các mã hóa json nên xảy ra tự động, và một bãi chứa của bài viết của bạn nên cung cấp cho bạn một cái gì đó như:

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

Mất ứng dụng 'contentType:"/json; charset = utf-8 ",'. Bạn đang 'POST'ing chuỗi truy vấn chuẩn, chứ không phải JSON. Sau đó 'print_r ($ _ POST)' sẽ cung cấp cho bạn mảng bạn hiển thị. –

2

chỉ cần xóa:

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

Có lẽ bạn nên giữ 'dataType:" json ",', đó là kiểu dữ liệu mà máy chủ trả về. –

+0

có đúng, nhưng json phải được trả lại để tránh lỗi khác –

+0

Tôi giả định OP trả về JSON, nhưng không thể hiện điều đó. Tôi không nghĩ sẽ có lỗi nếu bạn không trả lại gì cả. Bạn sẽ chỉ gặp lỗi nếu những gì bạn trả về không phải là JSON. –

1

Bạn đang tryng gửi mảng js với định dạng đối tượng js.

Thay vì sử dụng

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

thử:

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

Để gửi javascript obj để php sử dụng json và 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); 
    } 
}); 

để sử dụng đối tượng trong php:

$obj = json_decode($_POST["myData"]); 

echo $obj->var; 
Các vấn đề liên quan