2014-11-15 68 views
1

我是新来的Rails,我试图提交模型数据到控制器方法,从javascxript,并呈现结果列表...

function submitResults() { 
    resultURL = "/result"; 
    resultData = JSON.stringify(results); 
    $.ajax({ 
    type: "POST", 
    url: resultURL, 
    data: { results: resultData}, 
    contentType: "application/html", 
    dataType: "html" 
    }); 

服务器示出控制器的执行方法和视图被呈现...

Started POST "/result" for 127.0.0.1 at 2014-11-14 17:36:32 -0600 
Processing by ResultsController#create as HTML 
    Result Load (0.7ms) SELECT "results".* FROM "results" 
    Rendered results/index.html.erb within layouts/application (366.0ms) 
Completed 200 OK in 4722ms (Views: 408.3ms | ActiveRecord: 1.3ms) 

但浏览器不呈现该视图。这是我的创建方法,由$ .ajax调用触发...

def create 
    result = Result.new(result_params) 
    result.save 
    @results = Result.all 
    respond_to do |format| 
    format.html { render :index } 
    end 
end 

为什么浏览器不加载索引视图?

回答

1

你的ajax调用没有对响应做任何事情,为它定义回调函数。例如: -

$.ajax({ 
    type: "POST", 
    url: resultURL, 
    data: { results: resultData}, 
    contentType: "application/html", 
    dataType: "html" 
}).done(function(response) { 
    //attach the response somewhere in the DOM. 
}); 

检查AJAX文档的所有回调。

顺便说一句,你通常不希望通过ajax调用加载整个html页面。看起来像你正在渲染的页面包含了一切(似乎是使用默认布局)。在这种情况下,进行AJAX调用可能没有任何好处(并且使事情变得更加困难),并且您可能希望通过html表单进行发布。

+0

哦,对不起,我只是更新了答案。你的情况,我建议去一个HTML电话。 javascript在这里没有好处。但是,如果你想用jQuery来做,你可以使用$(document).html(response),它将保持url相同,但改变整个DOM。 – AOG 2014-11-15 00:24:19

+0

再次感谢,这是有道理的。我真的只是试图找出一种方法来从JavaScript调用我的创建方法。使用$ .ajax是我目前找到的唯一方法。 “html call”是什么意思?你能提供一个我可以用来研究进一步的快速代码片段吗? – BeachRunnerFred 2014-11-15 00:26:30

+0

好吧,如果你想通过JavaScript来实现,那么$ .ajax是最好的方法,但是我再次建议如果POST(调用创建)的结果将是浏览器页面更改,那么不要执行它通过JavaScript。 Rails有助手方法可以帮助你创建html表单(我的意思是html,没有javascript)。见[这里](http://guides.rubyonrails.org/form_helpers.html) – AOG 2014-11-15 00:34:13