2014-10-05 72 views
0

在我的轨道4的项目,我有一个POST和jQuery这样的(注意,咖啡脚本)提交资料:轨道4:应对阿贾克斯后会导致错误的渲染响应

post_data = 
     site_id: site 
     url: '//' + $('#host-holder').data('host') + '/' + key 

$.post("/sites/" + site + "/images",post_data, (success) -> 
     #successful_post 
).fail((xhr, textStatus, errorThrown) -> 
     #post failed 
) 

在我控制器,如果我这样做:

respond_to do |format| 
     format.js {render nothing: true} 
end 

提交后的优秀作品(在AJAX客户端成功运行的回调),但如果我这样做:

respond_to do |format| 
     format.js {render json: @image.to_json, status: :created} 
end 

它失败(在Ajax客户端运行失败回调)。

为什么?我在回应ajax请求时做错了什么? (注意:服务器端没有错误报告)

编辑:错误是“parsererror”,我其实有整个对象!它说"missing ; before statement" ...这是响应对象:"{"id":24,"url":"<EDITED FOR SECURITY>","thumbnail":null,"status":null,"site_id":28,"created_at":"2014-10-05T02:53:50.030Z","updated_at":"2014-10-05T02:53:50.030Z","quality":"good"}"

+0

控制台中的故障描述是什么? – 2014-10-05 02:45:14

+0

@ControlFreak请参阅我的编辑;我会假设在我的控制器中的@ image.to_json会构造正确的json? – faboolous 2014-10-05 03:01:29

+1

您可以使用json验证器(如jsonlint)检查您的json是否正确。你在响应中将'content-type'头部设置为'application/json'吗? – 2014-10-05 03:03:08

回答

0

这里你阿贾克斯的说法应该像现在这样,

$.ajax({ 
    URL: '/controller_name/action_name',   // url must be proper 
    type: 'POST', 
    data: { username: 'test' }, 
    success: function(response){ 
    alert(response); 
    }, 
}) 

在Route.rb:

post '/action_name' => 'controller_name#action_name' 

在Controller文件:

def action_name 
    @username = params[:username] 
    data = {:message => "Alert this!"} 
    render :json => data 
end