【问题标题】:Webix ajax with CORS working everywhere except IE带有 CORS 的 Webix ajax 可以在除 IE 之外的任何地方工作
【发布时间】:2015-08-10 06:38:54
【问题描述】:

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

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

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

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

有人对我可以尝试如何让我的 PHP 在 IE 中再次运行有任何建议吗?

【问题讨论】:

  • 你试过清除浏览器缓存吗?
  • 是的,并从多个工作站尝试了 sn-p/example,结果都相同。我已经在 Webix 支持论坛 (forum.webix.com/discussion/4463/ie-cors-problems#latest) 上寻求帮助,但由于他们在白俄罗斯,我不知道他们什么时候会回复我。

标签: javascript php ajax internet-explorer webix


【解决方案1】:

根据 CORS 场景的 Webix 文档,您可以做 2 件事。无论是你:

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

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

或者

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

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

【讨论】:

  • 我已经实现了选项 1,这就是为什么它适用于所有其他浏览器的原因。选项 2 不是一个选项,因为我需要在我的 web 应用程序的其他部分发布,而 JSONP 仅适用于 GET。
【解决方案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

【讨论】:

  • 昨晚我还收到了来自 Webix 的回复,通知我 ActiveX 问题。他们建议将 isIE 标志设置为 false,但我更喜欢您修改原型的解决方案,因为它似乎更通用,并且不太可能破坏我可能需要做的任何其他事情,这将取决于 IE。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-11-24
  • 2021-09-19
  • 2010-10-07
  • 1970-01-01
  • 2022-07-03
  • 2017-04-22
  • 1970-01-01
  • 2012-11-26
相关资源
最近更新 更多