跨域请求不起作用

时间:2014-11-05 07:42:50

标签: javascript jquery ajax xmlhttprequest

我有一个java服务,它使用xmlHttpRequest在javascript中调用,它正在返回XML数据。它在IE 8上工作正常。现在我们在IE 11中尝试它,chrome和mozilla它正在提供 500(内部服务器错误) .Code如下。

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

谷歌搜索后,我发现它与跨域请求有关,并使用了以下代码。

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

将行添加到上面的代码中..现在我没有得到任何错误,也没有输出我的reponseText为null .. 后来我尝试了$.ajax 代码如下:

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

我得到同样的错误...请帮助我。一件事是我现在无法改变服务..

3 个答案:

答案 0 :(得分:0)

实际上并不是你应该设置标题。服务器应在响应中设置标头Access-Control-Allow-Origin: *

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

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

答案 1 :(得分: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错误不仅与跨域有关,甚至与其他东西有关..

答案 2 :(得分:-2)

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

在调用AJAX调用中URL引用的脚本时创建一个断点。我相信这会启发你的问题。

如果后端的脚本没有触发调试,那么你的AJAX调用或者你的其他JS脚本可能出错了。