【问题标题】:getting the location header of an ajax call with javascript prototype使用 javascript 原型获取 ajax 调用的位置标头
【发布时间】:2009-07-15 15:52:38
【问题描述】:

在我的 javascript 应用程序(使用原型)中,我需要来自第三方服务器的一些信息,该服务器有时需要与用户进行 Web 交互,因此它会在 Location 标头中发送带有新 URL 的 302 http 代码。我想要的是捕获这个新 URL 以在单独的窗口中打开它,但是方法 getHeader('Location') 总是返回 null。任何的想法???这是我的代码的简化版本:

UPDATE = function(){
new Ajax.Request(proxy_url,{
    method: 'post', 
    parameters: "p1=1&p2=2",
    on302: function(response){
        OpenURLfromLocation(response);
    },

    onSuccess: function(transport){
        alert("OK");
    }

});}
OpenURLfromLocation = function(response){
alert(response.getHeader('Location'));
}

ajax 代理工作正常,我可以在 firebug 上看到它的行为正确,直到它尝试从标头恢复位置。

【问题讨论】:

  • 当您在 Firebug 或 Fiddler 中查看时,您看到标题了吗?使字符串全部小写有区别吗?
  • 是的,我可以在 firebug 中看到标题,我尝试使用小写字母,但仍然得到空值!

标签: javascript ajax prototypejs


【解决方案1】:

大多数浏览器都将来自 ajax (XMLHttpRequest) 的第三方 url 请求视为安全违规。 http://www.xml.com/pub/a/2005/11/09/fixing-ajax-xmlhttprequest-considered-harmful.html

您可能应该考虑通过代理或其他方式(如 php 中的 curl)请求此请求,这会使 javascript 请求成为本地请求。

不确定,如果这 100% 回答了您的问题,但可能也应该在您的情况下考虑。

【讨论】:

  • 我已经有一个代理来处理这个问题,它映射了内容和标题,但仍然存在问题。还是谢谢
  • 会不会是范围的问题?在 Ajax 请求中尝试来自 OpenURLfromLocation 的警报,或者将函数命名为 function OpenURLfromLocation(response){ alert(response.getHeader('Location')); }
【解决方案2】:

我已经有一段时间没有使用 Prototype,但是在实际的 XMLHttpRequest 对象上,方法名称是 getResponseHeader。但是,如果您控制服务器的响应,为什么不在响应正文中返回新的 URL?

附带说明,如果您要在从服务器发回的响应标头中添加“位置”,则惯例是在您添加到标头的任何内容前面加上“X-”,这样您就可以“X-位置”

【讨论】:

  • 谢谢...是的..我很难将其作为参数发送,这对我来说听起来不是正确的方法。我认为应该可以通过javascript。感谢您提供有关“X-”标题的提示。原型只是屏蔽该方法以返回 null,而不是像原始方法那样抛出异常。
  • 在标题中发送它对我来说似乎很奇怪。响应数据属于响应的主体,标头用于额外/元信息。所以,如果位置是响应的主要数据,它就属于正文。如果该位置是对包含正文中其他数据的“正常”响应的补充,那么我认为在这种情况下作为标头传递是有意义的。
  • mhh .. 也许你是对的,我会选择那个解决方案,但仍然有趣的是,firebug 可以提取该标题,但我不能从原型 =(
  • 是的,这很奇怪,但就像我说的,自从我使用 Prototype 已经很长时间了(早在 2004 年),所以我不再那么熟悉它了对那里的细节没有帮助。无论如何,将其标记为解决方案,以便我们知道这个问题已解决;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-31
  • 1970-01-01
  • 2017-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-15
相关资源
最近更新 更多