我的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);
}
答案 0 :(得分:1)
您可以尝试使用要传递给AJAX调用的设置对象的缓存属性。根据{{3}},cache的默认值设置为true,因此我想知道您的浏览器是否在第一次请求后访问结果的缓存副本。看起来你也可以设置dataType,这会将缓存默认为false。
另外,除了成功处理程序之外,我建议将警报放在onOpen事件处理程序中,以确保也被调用。所以这可以帮助你进一步调试。