2016-04-13 14 views
0

私はページプレビューのための同期スクリプトを持っています。 preview関数はサーバーにデータを送信するだけで、hookPreviewはクリックでそれを起動し、成功した場合に応答データを追加することになっています。Rails - ajaxによるjson応答の処理を改善する

window.Wiki = 
    preview: (raw_data) -> 
     preview_path = "/wiki/preview" 

     $.post preview_path, 
      "raw_data": raw_data, 
      (data) -> 
       $("#preview").html data.raw_data 
      "json" 

    hookPreview: (tab, textarea) -> 
     # Send data to controller on click 
     $(tab).bind "click", -> 
      res = Wiki.preview $(textarea).val() 
      console.log(res) 
      true 

$(document).ready -> 
    Wiki.hookPreview($("#preview-tab"), $(".editor")) 

私は、コンソールで応答resを調べることができます。コールバック関数とObject {readyState: 1}を、私はここで、「未定義」私に与えます(私のコンソールでは200である)res.statusを呼び出すことができませんでした。

まず、レスポンスを解析する方法は?次に、私のスクリプトを非同期スタイル(mentioned here)に改良したい。コントローラで

編集

preview.json.erbを使用
def preview 
    # ... 
    respond_to do |format| 
    format.json 
    end 
end 

:端末で

<%= {:body => @preview }.to_json.html_safe %> 

ロガーは、 "200 OK" で完了サーバーこのような問題は、スクリプトである示されました、サーバー側ではありません。

+0

データ= $ .parseJSON '@uzaif JSON.parse'方法 – uzaif

+0

使用は'(RES) '予期しないトークンエラーがスローされます:あなたは約束に.doneコールバックを追加する必要があります応答を検査する

。 – knh170

+0

あなたはコンソールエラーがありますか? – uzaif

答えて

1

jQuery.postすべてのajaxメソッドは、実際の応答ではなく約束オブジェクトを返します。

プロミスオブジェクトは、ある時点で応答を含むトークンに似ています。

window.Wiki = 
    preview: (raw_data) -> 
     preview_path = "/wiki/preview" 

     $.post preview_path, 
      "raw_data": raw_data, 
      (data) -> 
       $("#preview").html data.raw_data 
      "json" 

    hookPreview: (tab, textarea) -> 
     # Send data to controller on click 
     # jQuery.bind is depreciated - use .on instead 
     $(tab).on "click", -> 
      promise = Wiki.preview($(textarea).val()) 
      promise.done (data) -> 
       console.log(data) 
      true 

$(document).ready -> 
    Wiki.hookPreview($("#preview-tab"), $(".editor")) 
関連する問題