Yii2 jQuery 在 IE11 中不工作
Yii2 jQuery not working in IE11
问题
我正在尝试创建一个页面,该页面在单击复选框时更新 table 中的特定记录字段(最好不刷新页面)。我认为 jQuery/AJAX 适合我。
显然不是。
我已经为此苦苦挣扎了一段时间,所以我决定缩减它并真正简化它以找出不起作用的地方。 table 的更新很好(来自 Chrome),不刷新则不然。 none 它适用于 IE11。
它目前托管在我的本地计算机上,所以我的一部分人想知道这是否与它有关,但是 jQuery 在我以相同方式托管的其他网站上运行良好。
Yii2控制器动作:
public function actionTest() {
return 'This is just a static test';
}
(非常基本)php 页面:
这是页面渲染后的来源
<script src="/assets/ddb27309/jquery.js"></script>
<script src="/assets/eeb0e590/yii.js"></script>
<div id="loadToMe"> </div>
<script type="text/javascript">
$(document).ready( function() {
$('#loadToMe').load('/mycontroller/testing');
});
</script>
现在我通常希望用字符串 This is just a static test
填充当前空的 div - 简单易行。
但是
Chrome & FireFox: 重定向到 {mysite}/mycontroller/testing 并显示给定的文本。
IE 11: 给我以下错误消息,但没有其他任何反应:
XMLHttpRequest: Network Error 0x2f76, Could not complete the operation due to error 00002f76.
当我使用 $.get
、$.post
和 $.ajax
(具有各种语法差异)时,这两种浏览器的行为是相同的,只有一个例外 - IE11 给出不同的错误消息POST.
XMLHttpRequest: Network Error 0x800c0008, The download of the specified resource has failed.
我尝试了各种来源的各种方法,包括(但不限于 - 我不记得我尝试过的所有方法)如下:
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9" />
<meta http-equiv="X-UA-Compatible" content="IE=edge;chrome=1" />
AddDefaultCharset utf-8
并使用 IE 开发人员工具中的网络选项卡,我将其分别用于 POST 和 GET。
Protocol Method Result Type Received Taken Initiator Wait Start Request Response Cache read Gap
HTTP POST 302 text/html 464 B 47 ms XMLHttpRequest 0 16 0 31 0 2902
HTTP (Aborted) text/html 506 B < 1 ms XMLHttpRequest 2902 0 0 0 0 47
链接的 js 文件来自 Yii2(并且是 $.load
在 Chrome 中工作所需的最低要求)- 我没有以任何方式触及它们。
jQuery版本为v2.1.3
Yii2 版本是 v2.0.3
事实证明我有 localeUrls,这就是问题所在!
我的网址以当前语言为前缀(即 myurl.com/en/controller/action)
当我尝试加载 /mycontroller/testing
时,它似乎被 UrlManager 重定向到 /en/mycontroller/testing
,因此是重定向而不是加载(至少我是这么理解的 -我对 Yii2 比较陌生)
如果有人能指出可以更详细地解释这一点的地方,我将不胜感激,但至少现在我可以继续我的项目了。
谢谢
我重载了下 Response 类 (I overloaded the next class Response)
class Response extends \yii\web\Response{
public function redirect($url, $statusCode = 302, $checkAjax = true)
{
if ($checkAjax && (Yii::$app->getRequest()->getIsPjax() || Yii::$app->getRequest()->getIsAjax()))
{
$statusCode = 200;
}
return parent::redirect($url, $statusCode, $checkAjax);
}
}
IE11 return 错误:
XMLHttpRequest: Network Error 0x800c0008, The download of the specified resource has failed.
我的解决方案:Yii2 controller SET action:
use yii\helpers\Json;
public function actionTest() {
$out['message'] = 'This is just a static test';
echo Json::encode($out);
\Yii::$app->end();
}
或
public function actionTest() {
echo 'This is just a static test';
\Yii::$app->end();
}
从控制器中删除 (PHP-code) 所有重定向和 returns. ($this->redirect("..."))
尝试状态码 200:
return $this->redirect(['linker/checkout'], 200);
问题
我正在尝试创建一个页面,该页面在单击复选框时更新 table 中的特定记录字段(最好不刷新页面)。我认为 jQuery/AJAX 适合我。
显然不是。
我已经为此苦苦挣扎了一段时间,所以我决定缩减它并真正简化它以找出不起作用的地方。 table 的更新很好(来自 Chrome),不刷新则不然。 none 它适用于 IE11。
它目前托管在我的本地计算机上,所以我的一部分人想知道这是否与它有关,但是 jQuery 在我以相同方式托管的其他网站上运行良好。
Yii2控制器动作:
public function actionTest() {
return 'This is just a static test';
}
(非常基本)php 页面: 这是页面渲染后的来源
<script src="/assets/ddb27309/jquery.js"></script>
<script src="/assets/eeb0e590/yii.js"></script>
<div id="loadToMe"> </div>
<script type="text/javascript">
$(document).ready( function() {
$('#loadToMe').load('/mycontroller/testing');
});
</script>
现在我通常希望用字符串 This is just a static test
填充当前空的 div - 简单易行。
但是
Chrome & FireFox: 重定向到 {mysite}/mycontroller/testing 并显示给定的文本。
IE 11: 给我以下错误消息,但没有其他任何反应:
XMLHttpRequest: Network Error 0x2f76, Could not complete the operation due to error 00002f76.
当我使用 $.get
、$.post
和 $.ajax
(具有各种语法差异)时,这两种浏览器的行为是相同的,只有一个例外 - IE11 给出不同的错误消息POST.
XMLHttpRequest: Network Error 0x800c0008, The download of the specified resource has failed.
我尝试了各种来源的各种方法,包括(但不限于 - 我不记得我尝试过的所有方法)如下:
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9" />
<meta http-equiv="X-UA-Compatible" content="IE=edge;chrome=1" />
AddDefaultCharset utf-8
并使用 IE 开发人员工具中的网络选项卡,我将其分别用于 POST 和 GET。
Protocol Method Result Type Received Taken Initiator Wait Start Request Response Cache read Gap
HTTP POST 302 text/html 464 B 47 ms XMLHttpRequest 0 16 0 31 0 2902
HTTP (Aborted) text/html 506 B < 1 ms XMLHttpRequest 2902 0 0 0 0 47
链接的 js 文件来自 Yii2(并且是 $.load
在 Chrome 中工作所需的最低要求)- 我没有以任何方式触及它们。
jQuery版本为v2.1.3
Yii2 版本是 v2.0.3
事实证明我有 localeUrls,这就是问题所在!
我的网址以当前语言为前缀(即 myurl.com/en/controller/action)
当我尝试加载 /mycontroller/testing
时,它似乎被 UrlManager 重定向到 /en/mycontroller/testing
,因此是重定向而不是加载(至少我是这么理解的 -我对 Yii2 比较陌生)
如果有人能指出可以更详细地解释这一点的地方,我将不胜感激,但至少现在我可以继续我的项目了。
谢谢
我重载了下 Response 类 (I overloaded the next class Response)
class Response extends \yii\web\Response{
public function redirect($url, $statusCode = 302, $checkAjax = true)
{
if ($checkAjax && (Yii::$app->getRequest()->getIsPjax() || Yii::$app->getRequest()->getIsAjax()))
{
$statusCode = 200;
}
return parent::redirect($url, $statusCode, $checkAjax);
}
}
IE11 return 错误:
XMLHttpRequest: Network Error 0x800c0008, The download of the specified resource has failed.
我的解决方案:Yii2 controller SET action:
use yii\helpers\Json;
public function actionTest() {
$out['message'] = 'This is just a static test';
echo Json::encode($out);
\Yii::$app->end();
}
或
public function actionTest() {
echo 'This is just a static test';
\Yii::$app->end();
}
从控制器中删除 (PHP-code) 所有重定向和 returns. ($this->redirect("..."))
尝试状态码 200:
return $this->redirect(['linker/checkout'], 200);