1

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

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

如果您在除 IE 之外的任何内容中单击片段/示例中的按钮,您将获得来自整形外科诊所的膝关节外科医生列表。如果您尝试在 IE 中运行相同的代码,则会收到“脚本错误”消息。

我已经尝试过 GET 和 POST 来发出这个请求,以避免我在网上看到的 IE 缓存问题。

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

4

2 回答 2

2

webix 库是浏览器嗅探的,并且使用 ActiveX 而不是 IE 的 XMLHttpRequest:

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

如果您切换浏览器的用户代理字符串,从而破坏此浏览器检测,您会注意到跨域请求顺利通过。

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

  1. 按 F12 打开开发者工具
  2. 切换到仿真选项卡 (Ctrl+8)
  3. 将用户代理字符串设置为“Google Chrome”

此时选项卡将刷新。按下您的按钮,并注意结果按预期收到。

webix 正在做的这个测试应该首先检查 XMLHttpRequest 支持,如果存在就使用它。不推荐测试浏览器而不是功能的方法(您的问题很明显):

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

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

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

于 2015-05-28T00:27:16.400 回答
0

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

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

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

或者

  1. 更改您的客户端代码并使用带有 webix.jsonp() 方法的 JSONP 技术 - 代码片段可以在我上面提供的链接中找到

如果您可以访问 Web 服务器的配置以响应 http 请求的特定“Access-Control-Allow-Origin”标头,则第一个选项是理想的。但如果你没有那么多控制权,那么第二项是你的选择

于 2015-05-28T00:08:00.680 回答