Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在internet explorer 9中更改域名后,Ajax停止工作_Javascript_Css_Ajax_Jquery Mobile - Fatal编程技术网

Javascript 在internet explorer 9中更改域名后,Ajax停止工作

Javascript 在internet explorer 9中更改域名后,Ajax停止工作,javascript,css,ajax,jquery-mobile,Javascript,Css,Ajax,Jquery Mobile,我们正在使用html5、jQuery(1.8.2)和jQuery mobile开发一个移动站点,同时进行jQuery ajax调用(get和post)。 更改域名后,我们在ie9上的ajax调用将被“拒绝访问”。 我们试图包括jquery.iecors.js。但我们还是得到了同样的错误。有解决办法吗 示例代码: $.support.cors = true; $.ajax({ cache: false, async: true, crossDomain: true,

我们正在使用html5、jQuery(1.8.2)和jQuery mobile开发一个移动站点,同时进行jQuery ajax调用(get和post)。
更改域名后,我们在ie9上的ajax调用将被“拒绝访问”。
我们试图包括
jquery.iecors.js
。但我们还是得到了同样的错误。有解决办法吗

示例代码:

$.support.cors = true;

$.ajax({
    cache: false,
    async: true,
    crossDomain: true,
    timeout: 600000,

    url: baseUrl + '/SmartTouch/restServices/PrefferedHotels',
    type: 'GET',

    beforeSend: function (xhr) {
        xhr.setRequestHeader("Authorization", "Basic " + myencoded);
    },
    contentType: "application/x-www.form-urlencoded; (http://www.form-urlencoded;) (http://www.form-urlencoded;) charset=UTF-8",
    success: function (data) {

        alert("success");
    },
    error: function (jqXHR, textStatus, errorThrown) {


        alert("error!!::" + JSON.stringify(jqXHR));

        alert('response: ' + jqXHR.responseText);
        alert('code: ' + jqXHR.getResponseHeader('X-Subscriber-Status'));
        alert("textStatus " + textStatus);
        alert("errorThrown " + errorThrown);

    }
});
编辑:

beforeSend: function (xhr) {
    xhr.setRequestHeader("Authorization", "Basic " + myencoded);
    xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
    xhr.setRequestHeader("Access-Control-Allow-Methods", "POST,GET,OPTIONS");
},
contentType: "application/x-www.form-urlencoded; (http://www.form-urlencoded;) (http://www.form-urlencoded;) charset=UTF-8",
success: function (data) {
    alert("success");
},
error: function (jqXHR, textStatus, errorThrown) {
    alert("error!!::" + JSON.stringify(jqXHR));
IE9中的请求和响应头:

 Request:
    Key Value
    Request GET url HTTP/1.1
    Accept  text/html, application/xhtml+xml, */*
    Accept-Language en-US
    User-Agent  Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
    Accept-Encoding gzip, deflate
    Proxy-Connection    Keep-Alive
    Host     ("url")
    Pragma  no-cache
    Cookie  GUEST_LANGUAGE_ID=en_US; COOKIE_SUPPORT=true; __utmc=24444716; __utma=24444716.47018335.1379597653.1380274476.1380276859.17; __utmz=24444716.1379597653.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmb=24444716.6.10.1380276859 





    Response:
    Key Value
    Response    HTTP/1.1 200 OK
    Server  Apache-Coyote/1.1
    X-Powered-By    Servlet 2.5; JBoss-5.0/JBossWeb-2.1
    Accept-Ranges   bytes
    ETag    W/"64578-1380266616000"
    Last-Modified   Fri, 27 Sep 2013 07:23:36 GMT
    Content-Type    text/html
    Date    Fri, 27 Sep 2013 10:17:01 GMT
    Content-Length  64578
    Age 0
    Via 1.1 localhost.localdomain 

如果您希望从任何域命中Ajax url,服务器必须发送响应标头Access Control Allow Origin:*或Access Control Allow Origin:如果仅限于您的域,则必须发送您的域。您可以在响应中看到这些标头吗?

如果您使用的是基于windows的托管

请检查IIS的旧配置(如果可用)

有安全规定允许按内容类型分类

在页面中也添加此响应标题

或参阅以了解更多详细信息

我认为您已经在编辑中更新了它,但是它涉及到很多AJAX,如果您更改了安全选项而不是默认设置,那么您的IE9也可能是原因之一


我觉得应该可以,如果没有请回复

这种
内容类型
看起来很奇怪:

application/x-www.form-urlencoded; (http://www.form-urlencoded;) (http://www.form-urlencoded;) charset=UTF-8"
我可以想象IE也有同样的问题

试试合适的:

application/x-www-form-urlencoded; charset=UTF-8
                 ^-- notice: no dot!
IE也可能在授权方面出现问题。
可能
myencoded
超出范围或填写不正确。调试这个变量并看看这个问题:

您似乎确信这个问题与建议的jQuery错误无关(特别是因为您使用的是
jQuery.iecors.js
),所以我将继续

  • “编辑”位的意义是什么<代码>访问控制允许源代码:应在响应上设置(即服务器端,作为Apache/IIS/F5配置的一部分),而不是在请求上设置编辑:上有更多信息;如果您不能立即访问配置更改(在企业环境中非常常见),您还可以使用类似的篡改代理来处理标题

  • 即使不是问题,@DanFromGermany绝对正确-内容类型确实看起来很奇怪。您甚至不必手动设置它,默认情况下它是正确的

  • 您似乎还关心设置基本身份验证头。请记住,
    myencoded
    值只是编码的(未加密),因此您最好跳过标题:
    http(s)://用户名:password@www.example.com/

Moar编辑:

查看上面的MDN文档:

默认情况下,在跨站点XMLHttpRequest调用中,浏览器将 不发送凭据。必须在屏幕上设置特定的标志 调用XMLHttpRequest对象时

也许可以尝试添加
xhr.withCredentials=true发送到您的

重要注意事项:响应认证请求时,服务器必须指定域,并且不能使用通配符。上面的例子 如果标题通配符为: 访问控制允许源代码:*。由于访问控制允许源 明确提到,认证认可 内容返回给调用web内容的服务器


这将使以前关于在标题中使用星号的建议无效(即需要显式域)

请参阅这篇关于IE8和IE9上CORS实现的Microsoft文章:

具体来说,他们说了两件事:

  • 不能向请求中添加自定义标头

  • 不会随请求一起发送身份验证或cookie
你在评论中提到:

我们的问题是我们正在进行基本授权,包括以下头部:xhr.setRequestHeader(“授权”,“基本”+myencoded);在我们的ajax调用中。但是在ie9中,我们被拒绝访问。有没有办法包含这个头

不幸的是,我必须给你的答案是否定的,没有办法在IE8或IE9中包含这个标题。微软就是这样设计的

要让它与IE9上的CORS协同工作,您必须说服您连接的站点允许您以其他方式发送授权信息——可能是查询参数或发布数据

如果站点不合作,则始终会有请求代理工作,您可以在服务器上请求页面,服务器会用正确的标题转发请求等。

您可以尝试此操作

<meta http-equiv="X-UA-Compatible" content="IE=Edge" >


它强制浏览器以任何最新版本的标准进行渲染。参考

baseUrl
是硬编码的吗?还是从html输出中获取?是否检查该域(服务器)的授权是否正确
myencoded
此变量包含的内容是否正确?baseUrl是硬编码的。我能够在其他浏览器(包括ie10)中成功地进行ajax调用。因此我认为授权不是问题。这里似乎给出了答案:@Vytautas我们已经尝试了此链接中给出的所有选项,但没有任何效果。我们的问题是我们正在进行基本授权,包括以下标题:xhr.setRequestHeader(“授权”),“基本”+myencoded);在我们的ajax调用中。但是在ie9中,我们被拒绝访问。有没有办法包含这个标题?因为他们可以在其他浏览器中得到正确的响应;这可能不是问题所在。在ie9中,您会得到什么样的响应?或者你甚至不能得到被命中的请求?请求没有被命中。看看@Maz提供的链接,我认为这就是问题所在。我添加了这个js文件。但仍然会出现这个错误。我需要对ajax请求进行任何更改吗?@o.v.我们需要在服务器端的确切位置设置头?我们如何在response上设置它,在我们的例子中,response是json。@Shafeeq