0

ページをロードするときに含めるコードは次のとおりです。

<script type="text/javascript">
function test() {
    $.get('/login', function(data){
        alert("test");
        $('#flash_content').html("hi");
        }, 'script');}

    function test2(){
    var jqxhr = $.get("/login", function(data) {
            $('#flash_content').html(data);}, 'script')
            .success(function() { alert("second success"); })
            .error(function(request, status,error) { alert(error); })
            .complete(function() { alert("complete"); });}

    $(document).ready(function() {
    $("#login").click(function(event){
     event.preventDefault(); // Prevent link from following its href
    test2();
    });});
    </script>

test2()を呼び出すと、Railsサーバーログで必要なビューがレンダリングされることがわかります。firebugでは、ajax getからの応答が実際にページに上書きしたいフォームであることがわかりますが、ページは実際に変更されます。「Data」を文字列「hi」に置き換えましたが、実際にページに配置されます。ご覧のとおり、アラートがポップアップ表示され、次のように通知されます。

SyntaxError: missing ; before statement

サインインするためのコントローラーの方法は次のとおりです。

@user = User.new
respond_to do |format|
    format.html { }
    format.js  {render :layout => false }
    format.xml  { head :ok }
  end

およびレンダリングする必要のあるビュー:

    <%= form_tag user_sessions_path, :method => :post do  %>
  <div class="field">
    <%= label_tag :username %><br />
    <%= text_field_tag :username %>
  </div>
  <div class="field">
    <%= label_tag :password %><br />
    <%= password_field_tag :password %></br>
    Remember me : <%= check_box_tag :remember %>
  </div>

  <div class="actions">
    <%= submit_tag "Login" %>
  </div>
<% end %>

私は何時間もこれに取り組んできたので、おそらく私は何か明白なものを見ていません:(ありがとう。

4

1 に答える 1

1

返されるのはjavascript(の最後のパラメーター)であることをjqueryに伝えています$.get。これは、jqueryに、応答を受け取ったときにそれを評価する必要があることを通知します。

しかし、あなたの応答はhtmlです-javascriptが意味をなさないので、それを評価しようとしています。そのパラメーターを省略するか(jqueryに推測させる)、または「html」に設定する必要があります。

Railsは引き続きformat.jsxhrリクエストにブロックを使用しますが、format.htmlバージョンの前にブロックを配置する必要があると思います。

于 2012-08-19T07:48:03.253 に答える