2011-06-24 38 views
5

シンプルなデータをサーバーに送信しようとしていますが、これを行うには「大まかで準備ができた」方法が必要です。 jQueryを使用してサーバーにJSONを送信する

この

は、私がこれまで持っているものです:Firebugのを使用して

var emails = ['[email protected]', '[email protected]', '[email protected]']; 

var ruff_json = "{ 'emails': ["; 
for (i in emails) 
    ruff_json += ((i == 0) ? '' : ', ') + '\''+emails[i]+'\''; 

ruff_json += '] }'; 

jQuery.ajax({ 
    type: 'POST', 
    url: '1.php', 
    data: ruff_json, 
    dataType: "json", 
    timeout: 2000, 
    success: function(result){ 
     //do something 
    }, 
    error: function (xhr, ajaxOptions, thrownError){ 
     //do something 
    } 
}); 

が、私は、データがサーバーにポストされていることを見ることができます - しかし、サーバーで、何のデータ($ _POST空である)が存在しません - 私は何が間違っているの?

+2

JSONエンコードライブラリを使用する必要があります。試してみてください:https://code.google.com/p/jquery-json/ – limscoder

答えて

7

:として

data = {my_json: encoded_string}; 

は、次にPHP側では、データにアクセスすることができます。

var myobj = { this: 'that' }; 
$.ajax({ 
    url: "my.php", 
    data: JSON.stringify(myobj), 
    processData: false, 
    dataType: "json", 
    success:function(a) { }, 
    error:function() {} 
}); 

その後、PHPで我々は

<?php 
    $json = json_decode(file_get_contents("php://input"), true); 
    // Access your $json['this'] 
    // then when you are done 
    header("Content-type: application/json"); 
    print json_encode(array(
    "passed" => "back" 
)); 
?> 

我々はポスト変数でもない混乱を行うこの方法を行うには、一般的には、その高速化jQueryのプロセス、それらを持つより。

+0

最後に、jSONLint、jquery-jsonを使用し、この問題を解決するのに役立つphp://入力から直接読み取るという組み合わせでした。私の最大のショックは、データがJSONとしてPOSTされているにもかかわらず、$ _POSTに表示されていないことがわかりました。私はこの回答を選んだのは、有効な点のほとんどを持っていたからです。ジェレミーは、彼が何を意味しているかを実証するためのコードを提供する時間を取っていました。 – oompahloompah

+0

これは、投稿されたjsonがPHPが$ _POSTを埋め込むことを期待しているフォーマットではないためです。ファイルを投稿するのに似ていますが、$ _FILESには表示されません – Rahly

0

PHPは、受け取ったデータを解析することによって$_POSTを入力します。ただし、フォームでエンコードされたデータのみを認識し、JSONデータを自動的に解析することはできません。したがって、$_POSTはこの場合役に立たないでしょう。 get the raw post dataがあり、それをjson_decodeと解析する必要があります。

2

データフィールドには、キーと値のペアを持つオブジェクトが含まれている必要があります。これは、POSTキーと値のペアとしてエンコードされるためです。私たちは、JSONとのデータの全てをポスト

$data = json_decode($_POST['my_json']); 
関連する問題