2017-09-05 11 views
0

私はすでにstackoverflowに多くの質問があることを知っていますが、それらのどれも私の役に立つものではありません。RailsでAJAX呼び出しに応答する方法

function update_schedule($task){ 
    var taskId = $task.data("taskId"), 
    startHour, endHour, 
    userId = $('#users').val(); 
    if(!$task.hasClass('daily-task')){ 
    startHour = getStartHour($task), 
    endHour = startHour + (+$task.data('time')); 
    } 
    console.log(startHour, endHour) 

    $.ajax({ 
      url: '/heimdall/update_scheduled_task', 
      method: 'POST', 
      data: { "task_id": taskId, "start_hour": startHour, "end_hour": endHour, "user_id": userId }, 
      success: function(){ 
      console.log("SUCESS!!", data['head']) 
      }, 
      error: function() { 
       console.log("FAILURE"); 
      }, 
      async: true 
    }); 
} 

コントローラコード:

def update_scheduled_task 
    scheduled_task = ScheduledTask.find_or_create_by(task_id: params[:task_id]) 
    scheduled_task.update_attributes(start_hour: params[:start_hour], end_hour: params[:end_hour], task_id: params[:task_id], user_id: params[:user_id]) 

    end 

は、私が見つけたか、作成したタスクのIDを返すようにしたい。ここに私のAjaxコードです。私はこの情報を送受信する方法を知らない。私はこれに答えて読んだことがありますが、私はこの場合にどのように使用するか分かりません。

def update_scheduled_task 
    scheduled_task = ScheduledTask.find_or_create_by(task_id: params[:task_id]) 
    scheduled_task.update_attributes(start_hour: params[:start_hour], end_hour: params[:end_hour], task_id: params[:task_id], user_id: params[:user_id]) 

    render json: {scheduled_task_id: scheduled_task.id} 
end 

とAJAX機能の成功で、好きで、それを使用します:

答えて

2

あなたは必要なJSON形式でアヤックスにインフォアを返すようにrender json: ...を行うことができます

success: function (data){ 
    var data = JSON.parse(data); 

    console.log(data["scheduled_task_id"]); 
}, 
+0

私はまだエラーが発生します:Uncaught SyntaxError:位置1のJSONで予期しないトークンo – Mark

+0

あなたのコントローラに 'scheduled_task.id'の値を表示し、何を印刷することができますか? – Abhi

+1

問題はJSONを2回解析していました(最初はレンダリング、2番目は成功関数)。データを削除した後、everythignは完全に機能します。ありがとうございました。 – Mark

0

jQueryのさんsuccesserrorコールバックはコントローラから返されたステータスコードに依存しています。オブジェクトの作成/読み込み/更新ができない場合は、正しいステータスコードを返すようにしてください。成功すると、idプロパティを設定したJSONをレンダリングします。まず

if scheduled_task && scheduled_task.update_attributes(...) 
    render json: { id: scheduled_task.id } 
else 
    head :unprocessable_entity 
end 
1

、あなたは(あなたがデフォルトの足場の発電方法に頼ることができます)お使いのコントローラのコードの構造を改善する必要があります。私は、成功したupdate_attributesリターンtrueを信じ。あなたはjqueryのAJAXリクエストの成功と失敗の応答方法を変更する必要があり、その後

def update_scheduled_task 
    scheduled_task = ScheduledTask.find_or_create_by(task_id: params[:task_id]) 
    if (scheduled_task && scheduled_task.update_attributes(start_hour: params[:start_hour], end_hour: params[:end_hour], task_id: params[:task_id], user_id: params[:user_id])) 
    render json: { scheduled_task_id: scheduled_task.id } 
    else 
    render json: { error: l18n.t("error.messages.request_error") } 
    end 
end 

:次に、あなたはあなたの方法は、あなたが戻りたい答えは、このようなもので、唯一のJSON形式に応答することを示す必要があります。ここではそれがどのように見えるかの例です:

$.ajax({ 
    url: "/heimdall/update_scheduled_task", 
    method: "post", 
    data: { task_id: taskId, start_hour: startHour, end_hour: endHour, user_id: userId }, 
    success: function(result) { 
    if (result["scheduled_task_id"] != null) { 
     console.log("Schedule record => " + result["scheduled_task_id"]) 
    } else { 
     console.log("Error: " + result["error"]) 
    } 
    }, 
    error: function() { 
    console.log("Ajax request error"); 
    }, 
    // async: true => By default JQuery set true to async param. 
}); 

あなたは、このような何かをファイルのconfig/ruotes.rbでこのメソッドにアクセスするためのルールを追加する必要があることを忘れないでください:

post update_scheduled_task, :defaults => { :format => 'json' } 

これがあなたを助けてくれることを祈っています。

関連する問題