2009-07-31 45 views
1

我在Rails应用程序中使用它。我有一些代码将响应类型更改为javascript。新手:jQuery.ajaxSetup'beforeSend'是做什么的?

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

提交表单的时候,但它似乎并没有被称为提交由AJAX生成的JavaScript表单时,点击一个链接(代码继续通过rails HTML应答)这工作得很好。

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

回答

0

我不确定你的意思是“由AJAX生成的JavaScript表单” - 是否有可能您正在用JavaScript生成一个表单,然后通过点击(通过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() 
}); 
3

,如果你想使用Rails的respond_to代码...格式块的XHR标题设置需要使用jQuery。 Prototype默认设置这个,但你需要在JQuery中手动设置它,因为当text/javascript在accept头中时,format.js选项被执行。

您确定您的AJAX请求实际上正在触发吗?也许你的处理程序没有连接,链接发送正常的HTTP GET?