2014-11-05 147 views
0

我有一个java服务,它使用xmlHttpRequest在JavaScript中调用,它正在返回XML数据。它工作正常,IE 8以上。现在我们试图在IE 11中,铬和Mozilla它给500(内部服务器错误)。代码如下。跨域请求无法正常工作

request = new XMLHttpRequest(); 
request.open('POST', SERVERHOSTNAME+"/XXXXXX/XXXXXX/XXXXX/XXXXXInsert"); 
request.send(req,300000); 

谷歌搜索后,我发现它涉及跨域请求,并使用下面的代码。

request.setRequestHeader("Access-Control-Allow-Origin", SERVERHOSTNAME); 

增加了行以上code..Now我没有得到任何错误,也没有输出我reponseText为空.. 后来我试着用$.ajax 代码如下:

$.ajax({ 
    url:url, 
    type: "POST", 
    data:req, 
    dataType:"xml", 
    crossDomain:true, 
    success: function (response) { 
     alert(response); 
    }, 
    error:function(error1) 
    { 
     alert(error1); 
    } 
}); 

我得到相同的错误...请帮助我。一件事是我现在不能改变服务..

+0

允许克罗姆跨浏览器的请求。检查类似的问题.. http://stackoverflow.com/questions/2600574/crossdomain-settings-in-google-chrome ..启动crome.exe使用--disable-web-security作为参数ie“chrome.exe --disable-网络安全“ – Girish 2014-11-05 07:50:54

+0

感谢girish您的答复..我不能使用这个选项,因为我不能告诉所有我的用户在这种模式下启动它。 – aravind 2014-11-05 08:05:41

+1

'Access-Control-Allow-Origin'是**响应**标头,而不是请求标头。 – Quentin 2014-11-05 09:51:35

回答

0

单线这有助于我是添加

request = new XMLHttpRequest(); 
request.open('POST', SERVERHOSTNAME+"/XXXXXX/XXXXXX/XXXXX/XXXXXInsert"); 
request.setRequestHeader("Content-Type", "text/xml; charset=utf-8"); 
request.send(req,300000); 

我发现500错误不仅关系到跨域,甚至其他东西..

0

其实它不是你谁应该设置标题。服务器应在响应中设置标题Access-Control-Allow-Origin: *

浏览器发现您正在发送跨域请求。由于CSRF和XSS等跨域请求存在安全问题,浏览器会通过发送另一个请求并检查响应头来检查服务器是否允许跨域请求。如果服务器没有,浏览器显示错误。如果服务器确实发送了请求并获得响应。在你的情况下,我认为服务器不会在响应中设置标题..

您可以联系服务器管理员并要求他们从服务器端设置该标头。否则,你可能会尝试JSONP。 Basic example of using .ajax() with JSONP?

+1

同源策略与XSS无关,与CSRF无关。 – Quentin 2014-11-05 09:52:38

+0

为什么不呢?请参阅http://msdn.microsoft.com/en-us/library/cc709423(v=vs.85).aspx – 2014-11-05 09:55:30

+0

XSS和CSRF攻击都依赖于服务器用提交的数据做某事。虽然同源策略(对于需要预检OPTIONS检查的复杂请求)将防止攻击者利用XHR执行这些操作,但它不会阻止他们制作一个'

'并将其提交给JS 。同源策略可防止攻击者*将请求的响应*读取到其他来源。它是为了保护浏览器用户和正在进行请求的站点之间的私人数据。 – Quentin 2014-11-05 10:03:28

-2

请尝试在后端调试您的代码。

通过调用URL在您的AJAX调用中引用的脚本来创建断点。我相信这会启发你的问题。

如果您在后端的脚本没有触发调试,那么您的AJAX调用或您的其他JS脚本中可能有错误。