javascript - AJAX GET 调用将在第一次调用时起作用,但在其他点击后不起作用

标签 javascript jquery ajax asp.net-mvc

我的 javascript 中有一个 ajax 调用,该调用返回部分 View 并将其加载到 div 中。这个功能本来可以用,但后来突然就停止了。我不认为我更改了任何代码或任何会导致问题的内容,但显然有些事情正在发生。当您单击调用 Ajax 的按钮时,Ajax 调用将首次运行,但在重新加载页面之前不会再次运行。我尝试添加更多参数并移动 JavaScript,但它仍然不起作用。有什么原因会导致这种情况发生吗?

我尝试将 javascript 移出 onOpen 事件,但同样的事情仍然发生。我还发出了警报调用,以确保它成功调用并且警报被调用。我还安装了 fiddler 来检查调用,除了第一次单击按钮之外,从未进行过调用。这是一个非常令人沮丧的错误,非常感谢所有帮助。

这是我的 JavaScript:

@section scripts
{
    <script type="text/javascript">
        $(document).ready(function () {
            $("#assets-button").on("click", function ()
            {
                $('#assets-container').bPopup(
                {
                    modal: true,
                    onOpen: function () {
                        $.ajax({
                            type: 'GET',
                            url: '@Url.Action("EmployeeAssets", "Employee",new { id = Model.ID, empNo = Model.EmployeeNumber, username = Model.UserName })',
                            success: function (data) {
                                $('#assets-container').html(data);
                            }
                        });
                    },
                    onClose: function () {
                        var f = $('#assets-container').children('form');
                        var serializedForm = f.serialize();
                        var action = '@Url.Action("EmployeeAssets","Employee",new {empNo = Model.EmployeeNumber})';
                        $.post(action, serializedForm);
                    }
                });
            });
        });
    </script>
}

这是我尝试调用的操作:

[HttpGet]
public ActionResult EmployeeAssets(int id, int empNo, string username = null)
{
    var assets =  _employeeDb.EmployeeAssets.FirstOrDefault(e => e.EmpNo == empNo);
    if (assets == null)
    {
        var firstOrDefault = _employeeDb.EmployeeMasters.FirstOrDefault(e => e.EmployeeNumber == empNo);
        if (firstOrDefault != null)
        {
            username = firstOrDefault.UserName;
        }
        var newasset = new EmployeeAsset()
        {
            EmpNo = empNo,
            UserName = username

        };
        _employeeDb.EmployeeAssets.Add(newasset);
        _employeeDb.SaveChanges();
        assets = newasset;
    }
    return PartialView(assets);
}

最佳答案

您可以尝试使用传递给 AJAX 调用的设置对象的缓存属性。根据jQuery documentation for .ajax缓存的默认设置为 true,所以我想知道您的浏览器是否在第一个请求后访问结果的缓存副本。看起来您还可以设置 dataType,这会将缓存默认设置回 false。

此外,我建议除了成功处理程序之外,还将警报放入 onOpen 事件处理程序中,以确保它也被调用。因此这可能会帮助您进一步调试。

关于javascript - AJAX GET 调用将在第一次调用时起作用,但在其他点击后不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26415999/

相关文章:

javascript - Chrome/Safari HTML5 视频全屏模式无法正常工作

javascript - 在 <Style> 中创建和使用 CSS 表单,而不是在 <Body> 中使用 HTML

javascript - 如何使用 JavaScript 或 CSS 更改页面上的字符串

ajax - 取消 AJAX 请求会减慢后续导航速度

javascript - 如何更改 D3 中的默认轴标签

javascript - 可以找到文本的 CSS 选择器?

javascript - 如何检测 Web 应用程序正在应用程序模式或 Safari 模式下运行

javascript - 为什么我加载了 ajax 的 html 报告了错误的元素大小?

asp.net - 当复选框触发时,我的 ASP.NET Accordion 不会以动画方式显示面板更改

javascript - 使用 Yahoo YUI 3 进行 Google 地理编码 ajax 请求