【问题标题】:Ajax cross domain errorAjax跨域错误
【发布时间】:2011-12-20 10:32:12
【问题描述】:

我遇到了这个问题:

我有一个在 localhost:8000 上提供 XML 文件的 django (python) 服务器

我在 localhost:8080 上有一个使用 tomcat 的 liferay 项目,需要调用这个 XML 文件(在带有 ajax 的 javascript 中)

它调用文件,但从不获取它们。

tomcat 需要做什么才能得到这个文件?

提前致谢。

编辑:

这是我的要求:

$.ajax({
      type: 'GET',
      url: "http://127.0.0.1:8000/charger/entreprise/",
      dataType: "xml",
      crossDomain : true,
      success: function(xml){
            alert(xml);
        }
    });

这是我的请求标头:

Host    127.0.0.1:8000
User-Agent  Mozilla/5.0 (X11; Linux i686; rv:8.0) Gecko/20100101 Firefox/8.0
Accept  application/json, text/javascript, */*; q=0.01
Accept-Language fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding gzip, deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection  keep-alive
Referer http://localhost:8080/web/guest/home
Origin  http://localhost:8080

其实我怀疑是不是javascript的问题,我认为是服务器的问题。

在尝试了许多不起作用的解决方案之后,我终于解决了我的问题 你们是对的,JSONP 是解决方案,即使我必须将它适应 django 和我的具体问题,这根本不容易。

【问题讨论】:

  • 你在进行ajax调用时有什么错误吗?
  • 不在 django 日志中,不在 tomcat 日志中。由于响应为空,我在 firebug 中收到错误。
  • 您确定网址正确吗?它有一个错字entreprise 应该是enterprise
  • 不,网址很好,我是法国人,企业 = 企业,但在法国
  • 你能解释一下你是如何解决这个问题的吗?

标签: ajax django tomcat cross-domain


【解决方案1】:

您必须使用 JSONP (JSON Padding) 来执行跨域 AJAX 请求。 }

有关 JSONP 的信息,请参阅此链接

http://www.ibm.com/developerworks/library/wa-aj-jsonp1/

而且 jquery 也有 JSONP 的特性。在 jquery 文档中查看

【讨论】:

  • 很高兴为您提供帮助。 jquery ajax 中没有 JSONP 类型的属性。但有办法做到这一点。通过jquery ajax跨域搜索google,你会发现很多链接
  • 也许吧,但我不想再搜索了,我花了两个星期的时间来解决我的问题,知道已经解决了,我会做其他事情^^
  • 确实如此。我很高兴能帮助你休息一下:)
【解决方案2】:

默认情况下,浏览器会阻止跨域请求。如果您想解决这个问题,请查看 JSONP 了解更多详细信息。

【讨论】:

    【解决方案3】:

    如果跨域 ajax 是您唯一的问题,您可以使用 JSONP 来解决。

    各种 JS 框架已经实现了它(例如,寻找 JQuery AJAX 的 'crossDomain' 设置)

    尝试为您的 AJAX 请求设置 dataType: "jsonp xml"

    【讨论】:

    • 我已经尝试过跨域设置,但是没有用
    • 那么也许您应该传递您的 JQuery AJAX 请求,以便我们可以看到其中有什么问题。还要检查你从服务器获得的标题和你通过 JQuery 向它询问的内容类型(它们应该匹配)。
    • 我尝试设置“jsonp xml”,结果报错:“missing ; before statement”
    • 我设置了"jsonp; xml" 回到上一个问题
    • @BlueMagma 看起来你有一个 javascript 语法错误 "jsonp; xml" is not a valid dataType for jQuery ajax API
    【解决方案4】:

    正如其他人所提到的,JSONP 将解决您的问题。它允许跨域 AJAX 功能。

    另一种方法是在 Django 站点和 Tomcat 站点前面使用 Web 服务器,并让它代理请求。例如,您的主站点在 localhost:80 上运行,并根据 URLS 将其代理到适当的后端服务器。这样,从客户端和 JavaScript 的角度来看,HTML 和 JSON 请求将发送到同一个服务器。

    【讨论】:

      猜你喜欢
      • 2019-04-14
      • 2012-01-08
      • 2018-08-28
      • 2016-12-26
      • 2016-11-06
      • 2016-08-24
      • 1970-01-01
      • 2015-05-05
      • 1970-01-01
      相关资源
      最近更新 更多