33

json 形式のデータを php に送信し、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) を追加すると、firebug に array(0) {} が表示されます。

4

8 に答える 8

48

を失うcontentType: "application/json; charset=utf-8",。JSON をサーバーに送信するのではなく、通常の POST クエリを送信しています (たまたま JSON 文字列が含まれています)。

それはあなたが持っているものを働かせるはずです。

つまり、ここでJSON.stringifyorを使用する必要はまったくありません。json_decodeただ行う:

data: {myData:postData},

次にPHPで:

$obj = $_POST['myData'];
于 2012-06-08T19:35:31.650 に答える
23

これ$_POSTは、フォーム データが事前に入力されているためです。

JSON データ (または生の入力) を取得するには、 を使用しますphp://input

$json = json_decode(file_get_contents("php://input"));
于 2012-06-08T19:35:21.527 に答える
15

json と ajax を使用して javascript obj を php に送信するには:

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;
于 2016-06-13T09:47:42.063 に答える
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
)
于 2012-06-08T19:36:25.097 に答える
2

削除するだけです:

...
//dataType: "json",
url: "index.php",
data: {myData:postData},
//contentType: "application/json; charset=utf-8",
...
于 2012-06-08T19:49:18.210 に答える
1

js オブジェクト形式で js 配列を送信しようとしています。

使用する代わりに

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

試す:

var a = new Object();
a.something = ...
于 2013-10-23T09:42:24.130 に答える
0

I know it's been a while, but just in case someone still needs it:

The JSON object I need to pass:

0:{CommunityId: 509, ListingKey: "20281", Type: 10, Name: "", District: "", Description: "",…}
1:{CommunityId: 510, ListingKey: "20281", Type: 10, Name: "", District: "", Description: "",…}

The Ajax code:

data: JSON.stringify(The-data-shows-above),
type: 'POST',
datatype: 'JSON',
contentType: "application/json; charset=utf-8"

And the PHP side:

json_decode(file_get_contents("php://input"));

It works for me, hope it can help!

于 2018-04-25T03:54:07.127 に答える