Javascript 为什么这在Chrome中有效,而在IE和EDGE中无效?
下面的代码显示了一个ajax调用中的配置文件图片(如果它不在会话变量中)。 问题是当它第一次加载到EDGE时,它不会显示配置文件图片,而是显示默认占位符。一旦我刷新,它就会正常工作。 以下是my_Navigation.cshtml部分内容:Javascript 为什么这在Chrome中有效,而在IE和EDGE中无效?,javascript,html,asp.net-mvc-4,Javascript,Html,Asp.net Mvc 4,下面的代码显示了一个ajax调用中的配置文件图片(如果它不在会话变量中)。 问题是当它第一次加载到EDGE时,它不会显示配置文件图片,而是显示默认占位符。一旦我刷新,它就会正常工作。 以下是my_Navigation.cshtml部分内容: <nav class="navbar-default navbar-static-side" role="navigation"> <div class="sidebar-collapse"> <
<nav class="navbar-default navbar-static-side" role="navigation">
<div class="sidebar-collapse">
<ul class="nav" id="side-menu">
<li class="nav-header">
@if (User.Identity.IsAuthenticated)
{
<text><div class="dropdown profile-element">
@{
var strPictureURL = Session[SessionConstant.PictureURL].ToString();
var strLiteral = "<div id='ImageSpanId'>";
if (strPictureURL != "-1") { strLiteral += "<div alt='' class='profile-picture-size' style='background:url(" + strPictureURL + ")' ></div>"; }
strLiteral += "</div>";
@Html.Raw(strLiteral);
}
<a data-toggle="dropdown" class="dropdown-toggle" href="#">
<span class="clear">
<span class="block m-t-xs">
<strong class="font-bold">@User.Identity.Name</strong>
</span> <span class="text-muted text-xs block">Logged in <b class="caret"></b></span>
</span>
</a>
<ul class="dropdown-menu animated fadeInRight m-t-xs">
<li><a href="@Url.Action("EditUser", "Account")">Edit Profile</a></li>
<li><a href="@Url.Action("Index", "Manage")">Settings</a></li>
<li><a href="@Url.Action("Notifications", "UserNotifications")">Notifications</a></li>
<li class="divider"></li>
<li><a href="@Url.Action("LogOff", "Account")">Log out</a></li>
</ul>
</div>
<div class="logo-element">Logo</div>
</text>
}
else
{
Session[SessionConstant.PictureURL] = "-1";
<text><a href="@Url.Action("Login", "Account")"><i class="fa fa-sign-in"></i> Log in</a></text>
}
</li>
<li class="@Html.IsSelected(controller: "Dashboards")">
<a href="@Url.Action("Dashboard_1", "Dashboards")"><i class="fa fa-th-large"></i> <span class="nav-label" data-i18n="nav.dashboard">Dashboards</span> <span class="fa arrow"></span></a>
<ul class="nav nav-second-level collapse @Html.IsSelected(controller: "Dashboards", cssClass: "in")">
<li class="@Html.IsSelected(action: "Dashboard_1")"><a href="@Url.Action("Dashboard_1", "Dashboards")">Summary</a></li>
</ul>
</li>
<li class="@Html.IsSelected(controller: "Reports")">
<a href="@Url.Action("Index", "Reports")"><i class="fa fa-bar-chart-o"></i> <span class="nav-label" data-i18n="nav.dashboard">Reports</span> <span class="fa arrow"></span></a>
<ul class="nav nav-second-level collapse @Html.IsSelected(controller: "Reports", cssClass: "in")">
<li class="@Html.IsSelected(action: "Index")"><a href="@Url.Action("Index", "Reports")">All Reports</a></li>
</ul>
</li>
</ul>
</div>
</nav>
<script>
$(document).ready(function () {
if ($("#ImageSpanId").text() == "") {
$.ajax({
type: 'GET',
url: '@Url.Action("GetUserPictureURL", "AspNetUsers")',
success: function (data) {
alert(data);
if ((data != "") && (data != null))
{ $("#ImageSpanId").html("<img alt='' class='profile-picture-size' src='" + data + "' />"); }
else
{ $("#ImageSpanId").html("<img alt='' class='profile-picture-size' src='https://cdn0.vox-cdn.com/images/verge/default-avatar.v9899025.gif' />"); }
},
error: function (xhr, ajaxOptions, thrownError) {
alert(thrownError + ": " + xhr.responseText);
}
});
}
});
</script>
-
@if(User.Identity.IsAuthenticated)
{
@{
var strPictureURL=会话[SessionConstant.PictureURL].ToString();
var strlateral=“”;
如果(strPictureURL!=“-1”){strLiteral+=”;}
横向+=“”;
@Html.Raw(strLiteral);
}
标志
}
其他的
{
会话[SessionConstant.PictureURL]=“1”;
}
-
-
$(文档).ready(函数(){
如果($(“#ImageSpanId”).text()=“”){
$.ajax({
键入:“GET”,
url:'@url.Action(“GetUserPictureURL”、“AspNetUsers”),
成功:功能(数据){
警报(数据);
如果((数据!=“”)和&(数据!=null))
{$(“#ImageSpanId”).html(“”;}
其他的
{$(“#ImageSpanId”).html(“”;}
},
错误:函数(xhr、ajaxOptions、thrownError){
警报(thrownError+”:“+xhr.responseText);
}
});
}
});
为了以防万一,这里是my_Layouts.cshtml
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>My Application | @ViewBag.Title</title>
@RenderSection("Styles", required: false)
<link rel="stylesheet" type="text/css" media="print" href="~/Content/print.css" />
@Styles.Render("~/bundles/maincss")
@Scripts.Render("~/bundles/mainjs")
</head>
<body>
<div id="wrapper" class="@Html.PageClass()">
@Html.Partial("_Navigation")
<div id="page-wrapper" class="gray-bg @ViewBag.SpecialClass">
@Html.Partial("_TopNavbar")
@RenderBody()
@Html.Partial("_Footer")
</div>
</div>
@RenderSection("scripts", required: false)
</body>
</html>
我的应用程序|@ViewBag.Title
@RenderSection(“样式”,必填项:false)
@style.Render(“~/bundles/maincss”)
@Scripts.Render(“~/bundles/mainjs”)
@Html.Partial(“\u导航”)
@Html.Partial(“\u TopNavbar”)
@RenderBody()
@Html.Partial(“\u Footer”)
@RenderSection(“脚本”,必需:false)
解决了这个问题,对GetUserPictureURL的ajax调用需要一个缓存:false,这样Internet Explorer和EDGE就不会返回缓存响应。如果使用地址栏或F5打开页面,Chrome会发送缓存控制:max age=0
就这样。很抱歉问了这么长的问题。哪个部件特别不工作?我复制并粘贴了你的代码,它在EDGE中工作了(进行了ajax调用并设置了图像)。为什么不工作?它以什么方式不起作用?什么不起作用?对不起,我太早点击了发送,我会详细说明的。当它第一次加载到EDGE时,它不会显示配置文件图片,而是显示默认占位符。刷新后,它可以正常工作。此外,它在第一次运行时甚至没有达到GetUserPictureURL的服务器断点,但在ajax调用中返回“success”。刷新后,它确实到达了服务器断点。解决了这个问题,对GetUserPictureURL的ajax调用需要有一个“cache:false”,这样Internet Explorer和EDGE就不会返回缓存响应。