Javascript 为什么这在Chrome中有效,而在IE和EDGE中无效?

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"> <

下面的代码显示了一个ajax调用中的配置文件图片(如果它不在会话变量中)。 问题是当它第一次加载到EDGE时,它不会显示配置文件图片,而是显示默认占位符。一旦我刷新,它就会正常工作。 以下是my_Navigation.cshtml部分内容:

    <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就不会返回缓存响应。