0

私はopeninviterを使用してGmailから連絡先を取得していますが、これはうまく機能します。ただし、ajax呼び出しでjqueryを使用して連絡先を取得するフォームを送信すると、smartyはレンダリングされません。smartyは、私がやりたくないページのリロードのみをレンダリングするようです。だから、私の質問は、jquery ajax呼び出しの後にスマートにレンダリングするにはどうすればよいですか?

jqueryajax呼び出し

$(document).ready(function(){
 $('input[name="Submit"]').click(function() { 
 var query = $('#frmContact').serialize();
  $.ajax({type: "POST",url: "google_friends.php",data: query,cache: false,success:function (html) $('#errid').html('<span style="font-size:12px; font-family:Arial, Helvetica, sans-serif; color:#FF0000;">'+html+'</span>').show();}});        
    return false;});});
</script>

    <div>
    <!--- Smarty code that needs to render after jquery ajax call -->
    {if count($contacts) == 0 }
     <span id="errid" >{$msg}</span>
       <p>
     <!-- Form that is used by jquery ajax -->

    <form class="Form StaticForm" id="frmContact" action="" name="frmContact" method="post">
    <input type="hidden" name="provider_box" value="gmail" />
                <ul>
                    <li>
                       <input type="text" name="email_box" value="email" onBlur="if      (this.value=='') this.value='email';" onFocus="if(this.value=='email') this.value='';" />
                    </li>
                    <li>
                       <input type="password" name="password_box" value="password" onBlur="if(this.value=='') this.value='password';" onFocus="if(this.value=='password') this.value='';"  />
                    </li>

                    <li class="noBorderTop"><input class="Button WhiteButton Button18 trueB" type="button" value="Submit" name="Submit" />
                        <label>
                            &nbsp;</label>
                    </li>
                </ul>
                </form>       
    </p>
         <!-- smarty code that needs to render after ajax call -->
         {else}
         <span id="errid" ></span>
          <p>
         <form class="Form StaticForm2" action="" name="invtfrm" method="post">
               <ul>
                    <li style="float:left;margin-left:120px;">                          
                    <input type="checkbox" name="checkall" onClick="return doCheckAll();" style="vertical-align:0" />&nbsp;Select All

                    </li>
                    <li style="float:left;"><div class="box-dividerCenter1 gradient"></div></li>  
             <!-- smarty code that needs to render after ajax call -->   
             {foreach from=$contacts key=fkey item=fval}

                <li style="float:left;margin-left:120px;">                          
                    <input type="checkbox" name="email[]" value="{$fkey}"  style="vertical-align:0"/>&nbsp; 
            <!-- smarty code that needs to render after ajax call -->
                {$fval}&nbsp;&nbsp;&nbsp;&nbsp;{$fkey}

                    </li>   
                       <li style="float:left;"><div class="box-dividerCenter1 gradient"></div></li>     
           {/foreach}
            <li class="noBorderTop"><a class="Button WhiteButton Button18" href="#" id="sbmtbtn" ><strong>Invite</strong><span></span></a></li>
    {/if}
    </ul>
    </form>

4

1 に答える 1

2

あなたの仮定には論理的な誤りがあります。

Smartyは、ページが実際に読み込まれている(または再読み込みされている)場合にのみ使用されますが、jQuery(または他のjsフレームワーク)を使用したajaxリクエストに応答する場合には使用されません。基本的に、変数$contactsはページが読み込まれたときにのみチェックされますが、JavaScriptコードの一部の応答イベントが原因ではチェックされません。

ajaxテクニックを使用する主な理由の1つは、実際にはページのリロードを回避することです。

2つのより良いアプローチ:

  1. javascriptを使用して、htmlコンテナのコンテンツを変更します。.ajaxComplete()のjqueryマニュアルセクションには、その方法に関するいくつかの例があります。空のdiv-containerを宣言して、必要なデータを入力するだけです。
  2. fetch()また、ajax( -method )を介してsmarty-template全体をフェッチして返すこともできます。このようにして、プログラムロジックとレイアウトをより適切に分離することができます。
于 2012-07-15T11:47:42.763 に答える