2011-06-21 40 views
3

必须设置$.ajax上的什么参数来尝试将AJAX请求屏蔽为正常请求?我想它必须处理正确的标题。如何使AJAX请求看起来像普通的正常请求

我觉得问题的很大一部分是在本地的.html文件中工作时,jQuery的设置为Originnull头值。

有没有办法取出Origin-header?

在这个时候如果我通过网页浏览器浏览并使用jQuery AJAX请求,我会从相同的URL得到不同的结果。

+0

如果你得到不同的结果,这是因为该服务欲火。不要试图解决它。 –

回答

6

与jQuery相比,使用jQuery发送的AJAX请求与正常请求(无论您是否表示正常请求)不同,唯一不同的是添加的X-Requested-With: XMLHttpRequest HTTP标头。这个头可以像这样被删除:

$.ajax({ 
    url: '/foo', 
    type: 'POST', 
    data: { bar: 'baz' }, 
    beforeSend: function(xhr) { 
     xhr.setRequestHeader(
      'X-Requested-With', 
      { 
       toString: function() { return ''; } 
      } 
     ); 
    }, 
    success: function(result) { 
     alert(result); 
    } 
}); 

或全球范围内,为您的网站上所有的AJAX请求:

$.ajaxSetup({ 
    beforeSend: function(xhr) { 
     xhr.setRequestHeader(
      'X-Requested-With', 
      { 
       toString: function() { return ''; } 
      } 
     ); 
    } 
}); 
+0

似乎不起作用。如果这有什么不同,我正在做GET。 –

+0

@Seb Nilsson,不管它是做GET还是POST都没有什么区别。在这两种情况下,以下代码都会删除此实时演示中显示的“X-Requested-With”:http://jsfiddle.net/AUGQJ/1/(使用FireBug检查请求标题,并且不会找到一个'X-Requested-With')。 –

+0

我在之前没有找到它。但我仍然认为Origin设置为null是一个问题。 –

0
  1. jQuery没有设置Origin Header。只有浏览器本身才能做到。而jQuery(或JavaScript)没有权力通过这个头。

  2. 这里是关于原产头的情况下设置为null Null Origin Header

  3. jQuery和常规要求的唯一区别链接确实是X-要求,有了:XMLHttpRequest的也可以手动删除它,或者你可以请求与新的XMLHttpRequest,或与fetch()。

好运