2011-12-15 17 views
0

jqueryをロードしたビューを使用して単純なユーザー入力を行うだけです。この例では、フォームを含むビューをdivにロードするためのajaxリクエストを送信するWebページ上の簡単なボタンがあり、正常に動作します。フォームが送信されると、データはデコードされず、要求データ配列に追加されます。ここでCakePHP 2.0 jquery ajaxリクエストからフォームデータをデコードしない

はdiv要素へのビューをロードし、単純なリンク

<?php 
    $this->Js->get('#sayHi')->event(
     'click', 
     $this->Js->request(
      array('action' => 'sayHi'), 
      array('update' => '#sayHiOutput') 
     ) 
    ); 
    ?> 
    <li><?php echo $this->Form->button(__('Say Hi'),array(
     'id'=>'sayHi', 
     'href'=>$this->Html->url(array('action'=>'sayHi')), 
     )); 
    ?></li> 
    <li><div id=sayHiOutput></div></li> 

メインページからのコードの抜粋です。

  <?php 
      $data = $this->Js->get('#WidgetSayByeForm')->serializeForm(array('isForm' => true, 'inline' => true)); 
      $this->Js->get('#WidgetSayByeForm')->event(
       'submit', 
       $this->Js->request(
       array('action' => 'sayBye'), 
       array(
         'update' => '#sayHiOutput', 
         'data' => $data, 
         'async' => true,  
         'dataExpression'=>true, 
        ) 
       ) 
      ); 
      ?> 
      <?php echo $this->Form->create('Widget',array('action'=>'sayBye','default'=>false));?> 
      <fieldset> 
       <legend><?php echo __('Add Widget'); ?></legend> 
      <?php 
       echo $this->Form->input('name'); 
      ?> 
      </fieldset> 
      <?php echo $this->Form->end(__('Submit'));?> 
      <?php echo $this->Js->writeBuffer(); ?> 

このコードは、フォームが送信されるときにajaxリクエストをトリガし、リクエストのデータをシリアル化します。 TamperDataを使用してXMLリクエストデータを確認したところ、すべてが正しく動作するように見えます。 「QUERY」の配列は、適切な情報を示しているがしかし、コントローラのアクション「sayBye」で、リクエスト・データ・アレイは、空である、ここで私は、ログ・ファイルに印刷されたものです:

[data] => Array 
    (
    ) 

[query] => Array 
    (
     [_method] => POST 
     [data] => Array 
      (
       [Widget] => Array 
        (
         [name] => asdf 
        ) 

      ) 

    ) 

は私が期待したものとしましたデータ配列がクエリデータに表示されている部分配列と同じ内容を持つことを確認してください。だから私はこれを推測していますが、明らかに何かが見当たりませんが、私はそれを理解することができませんでした。たぶん隠された_メソッドはPOSTであってはいけませんか?どんな助けでも感謝します、ありがとう。

マット

答えて

2

あなたが要求()メソッドこのよう

+0

'type' => 'POST'オプションを渡す必要があります: 'Js-> GET( '#WidgetSayByeForm' ) - > serializeForm(配列( 'isForm' => true、 'インライン' => true)); \t echo "data:"。$ data; \tます$ this-> Js->取得( '#WidgetSayByeForm') - >イベント( '提出'、 ます$ this-> Js->要求( 配列( 'アクション' => 'sayBye')、 配列( \t \t \t \t '更新' => '#sayHiOutput'、 \t \t \t \t 'データ' => $データ、 \t \t \t \t '非同期' => falseを、\t \t \t \t \t 'dataExpression' => true、 \t \t \t \t 'タイプ' => 'POST' \t \t \t) \t \t) \t)。 ?> 'は機能しませんでしたが、まだ空の配列を渡しました。 – Matt

+0

生成されたjavascriptコードを貼り付けることはできますか? –

+0

ああ、私は解決策を見つけました、あなたの提案は正しい道にありました。私は 'method' => 'POST'を追加しなければなりませんでした。それがCakePHPのバグとして数えられるのか、私がドキュメントで何かを見逃してしまったのかどうかは分かりません。私は2.0.2を使用しています。ありがとう! – Matt

関連する問題