除了IE之外,Webix ajax与CORS一起工作

时间:2015-05-27 23:44:51

标签: javascript php ajax internet-explorer webix

昨天早上,我创建的webix小部件的AJAX调用停止在IE中工作(测试IE10和11)。直到昨天早上,它一直在与IE合作。

我已经恢复了我昨天早上从备份中修改过的php文件,但仍无法使用IE进行AJAX调用。我已经创建了一个Webix片段来帮助说明我遇到的问题(http://webix.com/snippet/2047ef57)。

如果您点击除IE之外的任何内容的代码段/示例中的按钮,您将获得整形外科诊所的膝盖外科医生名单。如果你试图在IE中运行相同的代码,你会得到一个"脚本错误"信息。

我已尝试使用GET和POST来发出此请求,以避免我在线阅读的IE缓存问题。

有没有人对我可以尝试让我的PHP在IE中再次运行有什么建议?

2 个答案:

答案 0 :(得分:2)

webix库是浏览器嗅探,并使用ActiveX代替XMLHttpRequest进行IE:

getXHR: function () {
    return webix.env.isIE
        ? new ActiveXObject("Microsoft.xmlHTTP")
        : new XMLHttpRequest;
}

如果您切换浏览器的用户代理字符串,从而破坏了浏览器检测,您会注意到跨域请求没有问题。

您可以按照以下步骤进行确认:

  1. 按F12打开开发人员工具
  2. 切换到仿真选项卡(Ctrl + 8)
  3. 将用户代理字符串设置为“Google Chrome”
  4. 此时标签将刷新。按下按钮,并注意按预期收到结果。

    webix正在进行的这项测试应首先检查XMLHttpRequest支持,如果它存在则使用它。不推荐测试浏览器而不是功能的方法(显而易见):

    尝试添加以下内容以使用我们自己的测试覆盖此逻辑:

    webix.ajax.prototype.getXHR = function () {
        return XMLHttpRequest
            ? new XMLHttpRequest
            : new ActiveXObject("Microsoft.xmlHTTP");
    }
    

    在线测试:http://webix.com/snippet/5e654155

答案 1 :(得分:0)

根据CORS场景的Webix文档,您可以做两件事。你要么:

  1. 配置托管PHP文件的服务器,以便允许来自其他域的任何客户端从中获取数据

    http://docs.webix.com/desktop__crossdomain_loading.html

  2. 或者

    1. 更改您的客户端代码并使用JSONP技术和webix.jsonp()方法 - 代码段可以在我上面提供的链接中找到
    2. 如果您访问Web服务器的配置以响应特定的" Access-Control-Allow-Origin"第一个选项是理想的选择。 http请求的标头。但如果您没有那么多控制权,那么第二项是您的选择