2016-08-15 4 views
0

私はユーザーがドロップダウンリストの1つの値を変更した場合、フォームのいくつかのコントロールを変更する必要があるフォームを持っています。それは現在...ドロップダウン・リスト変化にRailsでは、AJAX関数を呼び出して、ページが完了したらページを更新する方法は?

  1. を設定するの道、新しい値でフォームを保存するためのAJAX呼び出しを実行
  2. 「更新」の方法は私のオブジェクト上で実行する前に、私は削除マークAJAXのsuccess機能で
  3. を変更された新しい値に関係しないフィールドには、現在の問題は、自動保存の方法が完了する前にリロードが生じることがあるということです、それはlocation.reload()

を実行呼び出します。自動保存が完全に完了するまでページをリロードするにはどうすればよいですか? $.ajaxasync: falseを設定したくないのは、ユーザーにメッセージを表示してから待ってもらう前に、ページ全体がフリーズするためです。ありがとうございました!ありがとうございました!

reports.coffee

autoSavePost = (reload) -> 
    console.log('autosave executed'); 
    $.ajax 
    type: 'PUT' 
    url: '/reports/autosave' 
    data: $('#report-form').serialize() 
    dataType: 'script' 
    success: (data) -> 
     if reload 
     setTimeout(location.reload(), 5000); 
     return true 
    error: (xhr, ajaxOptions, thrownError) -> 
     console.log xhr.responseText.substr(0,1500) 
     return false 
    # schedule the next autosave 
    if $('#auto-save').length 
    setTimeout autoSavePost, 60000 
    else 
    return false 

    return 

$ -> 
     $(document).on 'change', '#report_position_id', (evt) -> 
     $.blockUI({ message: '<h5>Please wait, "Position Graded" is being changed...</h5>' }); 
     # grey out screen with message until page reloads. 
     autoSavePost(true) 
     return 
+1

ないのはなぜ成功が完了する前に「location.reload()が」発射されていますが、その成功の次の自動保存をスケジュールする必要がありますを確認します。

や頭をレンダリングコールバックはリクエストがスタックしないようにします。 – mnort9

+0

@ mnort9、ありがとう!良い電話 – daveomcd

答えて

1

は、コントローラ機能からJS、およびコールwindow.reloadをレンダリングされるJSファイルをレンダリングします。 [OK]をAJAXの成功をトリガーする、とwindow.reload

関連する問題