Ajax跨域错误

时间:2011-12-20 10:32:13

标签: ajax django tomcat cross-domain

我遇到了这个问题:

我有一个django(python)服务器,它在localhost:8000

上提供XML文件

我有一个在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,以及我的具体问题,这根本不容易。

4 个答案:

答案 0 :(得分:2)

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

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

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

jquery也有JSONP功能。在jquery文档中检查出来

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

各种JS框架已经实现(例如,查找JQuery AJAX的'crossDomain'设置)<​​/ p>

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

答案 3 :(得分:1)

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

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