我在Rails应用程序中使用它。我有一些代码可以将响应类型更改为javascript。
jQuery.ajaxSetup({
'beforeSend': function(xhr) {
xhr.setRequestHeader("Accept", "text/javascript")
}
})
这在提交表单时工作正常,但在提交由AJAX生成的javascript表单以点击链接时,似乎没有调用它(代码继续通过Rails html响应程序)。
可能是一个简单的修复。有什么想法吗?
答案 0 :(得分:3)
如果要使用Rails的respond_to ...格式块,则JQuery需要XHR头设置。 Prototype默认设置它,但您需要在JQuery中手动设置它,因为当text / javascript在accept头中时,format.js选项会被执行。
你确定你的AJAX请求实际上是在解雇吗?也许您没有附加处理程序,并且链接正在发送正常的HTTP GET?
答案 1 :(得分:0)
我不确定你的意思是“由AJAX生成的javascript表单” - 你是否有可能使用javascript在DOM中生成一个表单,然后点击(通过javascript)按钮进行常规提交?如果是这样,那么它不会通过AJAX提交,而是作为普通帖子提交。只有在通过AJAX提交表单时才会调用beforeSend处理程序。您的设置调用是添加默认的beforeSend函数,该函数设置Accept标头以便返回javascript,但它仅对通过AJAX提交的请求执行此操作。
这是AJAX提交的内容:
$.ajax({
url: '/controller/action',
type: 'post',
dataType: 'json',
data: $('form').serialize(), // this gets the form data
success: function() {
},
...
});
这是一个javascript创建的表单和提交(非AJAX)。
$('<form><input type="hidden" name="inp" value="somedata" /></form>')
.appendTo(document.body)
.submit();
或(通过按钮点击)
$('form #submitButton').click( function() {
$('form').submit()
});