为什么没有在这里触发ajax请求?

时间:2011-04-02 04:44:03

标签: jquery ruby-on-rails ruby ajax ruby-on-rails-3

所以我有一个自动填充字段,用户可以在其中选择现有标签或创建新标签。如果用户创建了新标签,他按下表单按钮,然后向视频控制器中的更新操作发送POST请求,该操作将请求作为AJAX处理,并且标记显示在字段上方。

现在,问题是当用户从建议列表中选择标签时。默认情况下,jQuery UI自动完成插件会将所选元素附加到字段内,然后用户必须按下表单按钮。但是,我希望通过在从建议列表中选择标记时自动添加标记来为用户节省一些工作。因此,我的application.js文件中包含此代码:

select: function(event, ui) {
           var url = $('.edit_video').attr('action');
           var val = ui.item.topic.name;
           $.ajax({type:"PUT", url:url, data:{video:{topic_names:val}}});
           return false;
        }

当从列表中选择元素时,成功地向更新操作发送PUT请求。但是,请求不会作为AJAX处理。标记已成功添加,但仅在页面刷新后才添加。我希望将请求作为AJAX处理。我怎么能这样做?

我猜这个问题与按下表单按钮的事实有关,:remote => true选项告诉rails查找format.js(我在更新操作中有) ,但是当没有按下按钮,并且从列表中选择了一个元素时,Rails不知道要查找JS。我怎么知道?

4 个答案:

答案 0 :(得分:1)

在Ajax请求中使用dataType:'script'应该有帮助。

.
.
$.ajax({type:"PUT", url:url, dataType: 'script', data:{video:{topic_names:val}}});
.

这将添加正确的标题,让rails识别正确的答案格式。

答案 1 :(得分:0)

'protect_from_forgery'可能会阻止你离开帖子。您可以使用Firebug(使用Firefox)进行检查。

答案 2 :(得分:0)

我会在firefox中查看是否还有其他内容绑定到$('。edit_video')。您可能正在提交表单。

此外,JS可以在浏览器上禁用,因此它会降级为非ajax。

最后检查你是否有jQuery和<%= csrf_meta_tag%>在布局文件中。祝你好运。

答案 3 :(得分:0)

我在这里假设没有被处理为AJAX的东西,你的意思是它不会渲染view.js.erb文件,而是渲染view.html.erb文件。您可以通过在JS中强制URL的格式来解决此问题:

var url = $('.edit_video').attr('action') + ".js";

然后将其发送到正确的格式以便您执行操作。