2

わかりました。とても簡単に思えることで助けが必要ですが、私には理解できません。

AJAX フォームを埋め込もうとしている Yii のページがあります。ページ A としましょう。フォームは 1 つの値を受け取り、問題がなければそれを検証して DB に保存する必要があります。

これまでのところ、私が考え出したことは次のとおりです。

フォームはビュー _form.php にあり、CActiveForm と次のような ajaxSubmitButton が含まれています。

<?php echo CHtml::ajaxSubmitButton('submit', $this->createUrl('/site/something'), array('update'=>'#targetdiv'));?> 

フォームは、次のように別の A のビュー内で呼び出されます。

<?php echo $this->renderPartial('/site/_form', array('AModel'=>$model)); //Passing some info about A ?>

コントローラーのアクションサムシングでは、次のことを行っています。

if (Yii::app()->request->isAjaxRequest) {

  $model = new AJAXForm('submit');

  if (isset($_POST['AJAXForm'])) {

    $model->attributes = $_POST['AJAXForm'];

    if ($model->validate()) {
    //When data's valid, save to DB is working fine. This part is working perfectly.
    }
    else {
      //This is the part I'm confused about and that's not working

      /*Trying to render the form to get the error messages and summary displayed
      but nothing's showing */
      $this->renderPartial('/site/_form', array('AModel'=>$model));

      Yii::app()->end();

    }
  }
}

Firebug では、エラーが発生すると、応答に部分的にレンダリングされたフォーム全体が再び含まれていることがわかります。ただし、targetdiv は更新されたフォームで更新されず、エラー メッセージが表示されます。

actionController で何か間違ったことをしているような気がしますが、何が原因かわかりません。AJAX で送信されたフォームの完全な例も表示できると助かります。

ありがとう!

4

2 に答える 2

1

$model->getErrors()すべての属性のすべてのエラーが表示されます

http://www.yiiframework.com/doc/api/1.1/CModel#getErrors-detail

if ($model->validate()) {
  //When data's valid, save to DB is working fine. This part is working perfectly.
  }
else {
  $errors = $model->getErrors();
  echo $errors;

  Yii::app()->end();
}

ajaxSubmitButton()Yii フォーラムの次の投稿によると、これを ajax オプションに渡します。 from-ajax-validation/

'success'=>"function(html) {
   if (html.indexOf('{')==0) {
        var e = jQuery.parseJSON(html);
        jQuery.each(e, function(key, value) {
        jQuery('#'+key+'_em_').show().html(value.toString());
        jQuery('#'+key).addClass('clsError');
        jQuery('label[for='+key+']').addClass('clsError');
   });
}
于 2012-10-28T18:07:57.477 に答える
0

次のように ajaxSubmitButton 属性に「dataType」を追加してみてください。

array('type' =>'POST',
    'update' => '#targetdiv',
    'dataType' => 'html',
),

最初にいくつかの基本的なテキストを返してテストすることをお勧めします。エラー メッセージを表示するだけであれば、フォームを再レンダリングする必要はないかもしれません。

于 2011-07-11T00:08:49.593 に答える