2011-07-19 13 views
1

私は知っているこれについては異なる質問がたくさんありますが、それらのどれも私に関係しているようです。次のように私は、Ajaxリクエストを持って次のようにAJAX、JSON、jQuery、およびPHP

var responsePacket; 
$.ajax({ 
    dataType: 'json', 
    type:'POST', 
    data:{ 
     "updatePacket":{ 
      "job":"name-update", 
      "firstName":firstName, 
      "lastName":lastName 
     } 
    }, 
    processData: false, 
    url:'modify.php', 
    success: function(json){ 
     console.log(json); 
     responsePacket = json; 

     if(responsePacket.updateStatus==true){ 
      genAlertAlignAndShow('Name Successfully Updated', false, 4000); 
     } 
     else{ 
      genErrorAlignAndShow('Name Update Failed!', false, 4000); 
     } 
    } 
}) 

そして、もう一方の端に私のPHPは、次のとおりです。

$updatePacket = json_decode($_POST['updatePacket'], true); 
//and I access variables from the JSON Object like this: 
$job = $updatePacket['job']; 

をAJAXに対応して、PHPファイルは、単純なJSONオブジェクトをパンチアウトします、はい、私のヘッダーはapplication/jsonに設定されています。

$responsePacket = array("updateStatus"=>true); 
echo json_encode($responsePacket); 

しかし、ここでは問題 の通りです:これは私が出力JSONレスポンス、私はそれをテストしてきたし、それは静的な応答を返すとき、私リグそれが戻っAJAX要求に取得するように見える方法ですあなたは私が推測したnullであり、JSONがPHPに正しく到達していないことを示しています。したがって、JSONオブジェクトを作成し、PHPスクリプトにデータをそのまま残すAJAXリクエストを作成する適切な方法があります。

私はこの問題を約3時間続けていますが、どんな提案も歓迎します。

+0

'var_dump($ _ POST);' –

+0

私は上記のコードにコピーして 'modify.php'という名前のファイルを作成しました。あなたのコードはうまく動作するようです。私は 'updateStatus'が' true'であることを知りました。 'updateStatus'が' false'のときに 'if'文のどこかの文を処理していますか?問題がそこにあるのは可能でしょうか? –

答えて

0

を。ここに私のAJAX Requstです:

$.post('modify.php', { job: "name-update", lastName: lastName }, function(data){ 
    console.log(data); 
}) 

問題:
受信スクリプトに変数にアクセスできないようになる変数名に引用符を入れAJAX POSTリクエストのためのデータを宣言する。

1

私は$_POST['updatePacket']が実際にはJSON文字列ではないと信じています。代わりに次のようにアクセスしてください:

$updatePacket = $_POST['updatePacket']; 
$job = $updatePacket['job']; 

json_decode()は不要です。 json_decode() manualから(戻り値):JSONをデコードすることができない場合

NULLが返されます...

はそれを試してみます。コメントに記載されているように、var_dump($_POST);は、あなたが思っているものを確実に得るために、あなたが試した最初のものにすべきです。

-1

あなたは間違っています。 JSONオブジェクトをサーバーに送信しない場合は、キーと値のペアを送信します。それがjQueryの期待です。代わりに、このようにそれを実行します。

data: { 
    "job": "name-update", 
    "firstName": firstName, 
    "lastName": lastName 
}, 

と、このような値にアクセス:私はそれを考え出した

​​
+0

これが唯一の方法ではありません。フォームが大規模な場合は、フォームのシリアル化がずっと簡単です。それが機能が存在する理由です。また、関数を繰り返し使用することもできます。 – Goddard

+0

なぜ投票が遅れましたか?彼の例に基づいて、彼はそれを間違ってやっていた。受け入れられた答えを見て、私と比較するだけです!彼はそれを書いてもらいましたが、 "なぜ"は間違っています。あなたもそれを投票して下すべきです! – fromvega

0

jqueryまたはjavascriptだけで、フォームデータをクリーンな方法で簡単に取得できます。

データを.serialize()するだけです。一例がここにあります。

$("form").on("submit", function(event) { 
    event.preventDefault(); 
    console.log($(this).serialize()); 
}); 

これが完了すると、このような文字列を変換できます。この用法でこの

$params = array(); 
parse_str($_GET, $params); 

"param1=someVal&param2=someOtherVal" 

あなたはまた、データをフィルタリングすると、あなたは前以上にこれを行う必要があります。

http://php.net/manual/en/function.filter-input.php 

これは時間がかからず、それぞれを個別にajaxにリストしますか?これを行う関数を作成して、ajax定型文を継続的に記述しないようにすることもできます。

関連する問題