新手:jQuery.ajaxSetup'foreSend'做什么?

时间:2009-07-31 19:55:29

标签: jquery ruby-on-rails ajax

我在Rails应用程序中使用它。我有一些代码可以将响应类型更改为javascript。

jQuery.ajaxSetup({
    'beforeSend': function(xhr) {
        xhr.setRequestHeader("Accept", "text/javascript")
    }
})

这在提交表单时工作正常,但在提交由AJAX生成的javascript表单以点击链接时,似乎没有调用它(代码继续通过Rails html响应程序)。

可能是一个简单的修复。有什么想法吗?

2 个答案:

答案 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()
});