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

所以我有一个自动填充字段,用户可以在其中选择现有标签或创建新标签。 如果用户创建新标签,则按下表单按钮,它会向video控制器中的更新操作发送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。 我怎么知道?

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

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

然后,它会将其发送到您的操作的正确格式。

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

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

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

我会检查是否有任何其他东西绑定到firefox中的$(’。edit_video’)。 您可能正在提交表单。

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

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

‘protect_from_forgery’可能会阻止你离开post。 您可以使用Firebug(使用Firefox)进行检查。