AJAX GET调用将在第一次调用时工作,但在其他单击之后不工作

AJAX GET Call Will work on the first call but not after other clicks

本文关键字:调用 工作 其他 单击 之后 GET 第一次 AJAX      更新时间:2023-09-26

我的javascript中有一个ajax调用,它返回并将部分视图加载到div中。这个函数以前可以工作,但后来突然停止了。我不认为我更改了任何代码或任何会导致问题的东西,但很明显发生了一些事情。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调用的设置对象的缓存属性。根据ajax的jQuery文档,缓存的默认值设置为true,所以我想知道您的浏览器是否在第一次请求后访问结果的缓存副本。看起来你也可以设置dataType,这将默认缓存返回false。

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