gpt4 book ai didi

javascript - :remote => true creating unknown format?

转载 作者:行者123 更新时间:2023-11-30 12:54:02 29 4
gpt4 key购买 nike

检查一下。我有一个相当简单的表单,它是使用以下语法创建的:

<%= form_for([@issue, @issue_order], :remote => true) do |f| %>

由于页面上的逻辑,表单实际上是通过javascript调用的,如下所示:

$('#new_issue_order')[0].submit()

Controller 通过执行一些逻辑然后抛出一些类似这样的东西来处理 ajax 请求:

    respond_to do |format|
format.js
end

处理此响应的 AJAX 在以下 javascript 中:

$('#new_issue_order').on('ajax:success', issueOrder.processOrder)
..........
processOrder: function(e, data, status, xhr) {
$('.sign-up-errors').empty();
errors = xhr.getResponseHeader('X-Flash-Error').split(',');
for (i=0; i < errors.length; i++) {
$('.errors').append($('<p>' + errors[i] + '</p>'));
}
setTimeout(function() {
$('.errors').empty();
}, 3500);·
}

我认为这将允许它响应远程请求,但我得到的却是以下错误:

ActionController::UnknownFormat

我尝试在我的 View 中创建一个 new.js.erb(以对应它所在的新页面),但我仍然遇到相同的错误。我没有尝试将我的成功处理程序 AJAX 迁移到 new.js.erb 代码,因为出于业务原因我更愿意将我的 javascript 处理保留在我的 Assets 的 javascript 文件中。

如何获得无缝的 AJAX 响应?我以前做过,但 respond_to 一直让我感到困惑。

最佳答案

将 js 响应模板设置为 new.js.erb 是不正确的。

表单本身在 new.html.erb 模板中,按照约定猜测。因此,表单的操作应该指向 #create

为了正确响应该表单的提交,需要创建一个js模板为create.js.erb,并在#create Action 中响应js。

此外,在大多数情况下,您不需要像 assets js 那样手动设置 Ajax 响应

$('#new_issue_order').on('ajax:success', issueOrder.processOrder)...

相反,您可以在 create.js.erb 中执行此操作。例如

$('#new_issue_order').css('background', 'green')

此脚本将在 ajax:success 事件之后运行。

关于javascript - :remote => true creating unknown format?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19899113/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com