Webix ajax 除了 IE,CORS 在任何地方都可以工作
Webix ajax with CORS working everywhere except IE
昨天早上,来自我创建的 webix 小部件的 AJAX 调用在 IE 中停止工作(已测试 IE10 和 11)。直到昨天早上它才与 IE 一起工作。
我已经从备份中恢复了昨天早上修改的 php 个文件,但仍然无法使用 IE 进行 AJAX 调用。我创建了一个 Webix 片段来帮助说明我遇到的问题 (http://webix.com/snippet/2047ef57)。
如果您在除 IE 之外的任何程序中单击 snippet/example 中的按钮,您将获得骨科诊所的膝外科医生名单。如果您尝试在 IE 中 运行 相同的代码,您会收到一条 "Script Error" 消息。
我已尝试使用 GET 和 POST 来发出此请求以避免我在网上阅读到的 IE 缓存问题。
有人对我可以尝试让我的 PHP 在 IE 中再次工作有什么建议吗?
根据 CORS 场景的 Webix 文档,您可以做两件事。你要么:
配置托管您的 PHP 文件的服务器,以便它允许来自另一个域的任何客户端从中获取数据
或者
- 更改您的 client-side 代码并通过 webix.jsonp() 方法使用 JSONP 技术 - 代码片段可以在我上面提供的 link
中找到
如果您可以访问 Web 服务器的配置以使用特定的 "Access-Control-Allow-Origin" header 响应 http 请求,则第一个选项是理想的。但如果你没有那么多控制权,那么第二项是你的选择
webix 库正在浏览器嗅探,并且使用 ActiveX 而不是 IE 的 XMLHttpRequest:
getXHR: function () {
return webix.env.isIE
? new ActiveXObject("Microsoft.xmlHTTP")
: new XMLHttpRequest;
}
如果您切换浏览器的用户代理字符串,从而破坏此浏览器检测,您会注意到跨域请求顺利通过。
您可以通过以下步骤确认这一点:
- 按 F12 打开开发者工具
- 切换到仿真选项卡 (Ctrl+8)
- 将用户代理字符串设置为 "Google Chrome"
此时标签会刷新。按下您的按钮,并注意收到的结果符合预期。
webix 正在做的这个测试应该首先检查 XMLHttpRequest 支持,如果存在就使用它。不推荐测试浏览器而不是功能的方法(从您的问题可以看出):
尝试添加以下内容以使用我们自己的测试覆盖此逻辑:
webix.ajax.prototype.getXHR = function () {
return XMLHttpRequest
? new XMLHttpRequest
: new ActiveXObject("Microsoft.xmlHTTP");
}
昨天早上,来自我创建的 webix 小部件的 AJAX 调用在 IE 中停止工作(已测试 IE10 和 11)。直到昨天早上它才与 IE 一起工作。
我已经从备份中恢复了昨天早上修改的 php 个文件,但仍然无法使用 IE 进行 AJAX 调用。我创建了一个 Webix 片段来帮助说明我遇到的问题 (http://webix.com/snippet/2047ef57)。
如果您在除 IE 之外的任何程序中单击 snippet/example 中的按钮,您将获得骨科诊所的膝外科医生名单。如果您尝试在 IE 中 运行 相同的代码,您会收到一条 "Script Error" 消息。
我已尝试使用 GET 和 POST 来发出此请求以避免我在网上阅读到的 IE 缓存问题。
有人对我可以尝试让我的 PHP 在 IE 中再次工作有什么建议吗?
根据 CORS 场景的 Webix 文档,您可以做两件事。你要么:
配置托管您的 PHP 文件的服务器,以便它允许来自另一个域的任何客户端从中获取数据
或者
- 更改您的 client-side 代码并通过 webix.jsonp() 方法使用 JSONP 技术 - 代码片段可以在我上面提供的 link 中找到
如果您可以访问 Web 服务器的配置以使用特定的 "Access-Control-Allow-Origin" header 响应 http 请求,则第一个选项是理想的。但如果你没有那么多控制权,那么第二项是你的选择
webix 库正在浏览器嗅探,并且使用 ActiveX 而不是 IE 的 XMLHttpRequest:
getXHR: function () {
return webix.env.isIE
? new ActiveXObject("Microsoft.xmlHTTP")
: new XMLHttpRequest;
}
如果您切换浏览器的用户代理字符串,从而破坏此浏览器检测,您会注意到跨域请求顺利通过。
您可以通过以下步骤确认这一点:
- 按 F12 打开开发者工具
- 切换到仿真选项卡 (Ctrl+8)
- 将用户代理字符串设置为 "Google Chrome"
此时标签会刷新。按下您的按钮,并注意收到的结果符合预期。
webix 正在做的这个测试应该首先检查 XMLHttpRequest 支持,如果存在就使用它。不推荐测试浏览器而不是功能的方法(从您的问题可以看出):
尝试添加以下内容以使用我们自己的测试覆盖此逻辑:
webix.ajax.prototype.getXHR = function () {
return XMLHttpRequest
? new XMLHttpRequest
: new ActiveXObject("Microsoft.xmlHTTP");
}