1

人々が私を飛び越える前に、私はこのスレッドを見ました:jQueryでシリアル化されたフォームをPHPで非シリアル化するにはどうすればよいですか?

私の質問は非常に似ていますが、私のデータは大きく異なります。私は投稿を行うためにAJAX呼び出しを使用していますが、データは問題なく投稿されます(jQueryは1.7です)。ユーザーがいくつかのリンクをクリックしてこのフォームとajaxスクリプトにドリルダウンすると、フォームとAJAXが動的に読み込まれます。

AJAXは次のようになります:(ところで、あなたが.on()を使用することになっていることはわかっていますが、.live()のように機能させることができないようです)

$('#ajaxCaptionForm').live('submit', function(e){
    e.preventDefault(); 
    $.ajax({
        'type':'POST',
        'data':{formData: $('#ajaxCaptionForm').serialize()},
        'success':function(){
            parent.$.fancybox.close();
        }
    });   
}); // closing form submit 

フォームは次のようになります。

<form method="Post" action="localhost/controller" id="ajaxCaptionForm" name="ajaxCaptionForm">
    <label for="Caption">Caption</label><input type="text" id="Caption" name="Caption" value="Leaf lesions.">
    <label for="Keywords">Keywords</label>
    <p>Please seperate keywords by a comma
    <input type="text" id="Keywords" name="Keywords" value=""></p>
    <input type="hidden" id="imageID" name="imageID" value="87595">
    <input type="submit" value="Update Image" name="yt3" clicked="true">
</form>

シリアル化されたデータは次のようになります:(firebugによる)

formData=Caption%3DFruit%2Blesions.%26Keywords%3D%26imageID%3D87592

応答をエコーアウトすると、次のようになります。

"Caption=Leaf+symptoms+of+++CCDV.&Keywords=&imageID=87655"

私の問題は次のとおりです。

  1. コンテンツを入れてもキーワード欄は空っぽ
  2. コンテンツを変更しても、投稿時にキャプションフィールドが変更されません。
  3. 各変数にアクセスするにはどうすればよいですか?キャプション、キーワード、画像。$_POSTは機能しません。

    Yii :: app()-> request-> getParam('imageID')

4

1 に答える 1

1

JSONキーと値のペアの値として、シリアル化されたフォームデータ(すでにURLエンコードされたkey = valuesである必要があります)を作成しているようです。これはあなたがやろうとしていることですか?

http://api.jquery.com/serialize/から、.serialize()を介して送信されたフォームデータは「標準のURLエンコード表記のテキスト文字列である」ことに注意してください。

http://api.jquery.com/jQuery.ajax/から、データ設定が「まだ文字列でない場合は、クエリ文字列に変換される」ことに注意してください。

したがって、「標準のURLエンコード表記」のテキスト文字列を取得し、それをデータ設定のキーと値のJSONペアの値にします。

代わりに、次のようなものにする必要があると思います(live()v。on()の問題は無視してください)。

$('#ajaxCaptionForm').live('submit', function(e){
    e.preventDefault(); 
        $.ajax({
            'type':'POST',
            'data':$('#ajaxCaptionForm').serialize(),
            'success':function(){
                parent.$.fancybox.close();
            }
        });   
    }); // closing form submit 

これは、すべてが「formData」キーの下で渡されるため、期待どおりに何にもアクセスできない理由でもあります。print_r($ _ POST)を実行してこれを確認するか、Yii :: app()-> request-> getQueryString();をエコーすることができます。どちらも、PHP配列として送信したすべてのデータを出力し、キーと値を表示する必要があります。

提案として、これは、Firebugコンソールを使用して、送信されているパラメーターを正確に確認する場合の完璧な例です。

于 2012-06-28T16:29:03.083 に答える