ASP.NET MVC/jQuery/AAJAX:链接第一次无法工作,但第二次工作(在页面重新加载后)
ASP.NET MVC/jQuery/AJAX: link fails to work first time, but works second time (after page reloads)
前言
对于这个问题,我有一个MVC局部视图。该视图有一个显示文档列表的部分。每个文档都有一个超链接:单击后,超链接会将用户带到显示附加信息的第二个页面视图。
链接位于无序列表中:
<a style="text-decoration:underline;" onclick="sendToDocketSearch('@currentDocument.DktYear','@currentDocument.DktSequence','@currentDocument.DktSubActionID');">@currentDocument.DktYear.ToString().PadLeft(2, '0') - @currentDocument.DktSequence.ToString().PadLeft(5, '0')</a>
当用户点击链接时,它会将他们带到sendToDocketSearch
javascript函数(准备搜索文档(:
var sendToDocketSearch = function (yearOfDocket, sequenceOfDocket, dktSubActionIDOfDocket) {
jQuery.ajax({
type: "POST",
url: "@Url.Action("DocketSearchOnDemand")",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ docketYear: yearOfDocket,
docketSequence: sequenceOfDocket,
DktSubActionID: dktSubActionIDOfDocket,
userIsAuthorized: '@Model.userIsAuthorized' }),
success: function (data) {
alert(data);
},
failure: function (errMsg) {
alert(errMsg);
}
});
submitForm();
}
请注意,页面/视图/表单是在运行以下控制器方法后提交的:
public ActionResult DocketSearchOnDemand(string docketYear, string docketSequence, decimal DktSubActionID, bool userIsAuthorized, PortalIndexView viewmodel)
{
System.Web.HttpContext.Current.Session.Add("userIsAuthorized", userIsAuthorized);
string docketSearch = docketYear + "-" + docketSequence;
System.Web.HttpContext.Current.Session["DocketSearchOnDemand"] = docketSearch;
if (DktSubActionID > 0)
{
System.Web.HttpContext.Current.Session["DktSubActionID"] = DktSubActionID.ToString();
System.Web.HttpContext.Current.Session["searchingCustomID"] = true;
}
else
{
System.Web.HttpContext.Current.Session["DktSubActionID"] = "1";
System.Web.HttpContext.Current.Session["searchingCustomID"] = false;
}
return View(viewmodel);
}
上述控制器方法运行;然后,因为表单已经提交,页面的HttpPost操作就会发生。当我在本地电脑上运行它时,会点击链接,然后加载下一页,不会出现戏剧性的情况。
问题
当我将代码上传到dev/test服务器时,问题就开始了。我不知道如何在对活动网站进行故障排除时使用断点,所以我使用浏览器开发工具来监控网络流量。
当在我的本地服务器上运行网站时点击链接时,过程继续:
- 超链接将我带到一个方法,在该方法中我传递要搜索的信息
- 页面/视图/表单已提交
- 控制器重定向到我必须去的地方
当我点击网站上的链接,它在服务器上时,第一次点击被完全忽略了-网络流量显示它试图通过上面的javascript功能导航到控制器,但失败发生得太快了,我甚至无法截图。此时页面第二次重新加载。
当我第二次点击同一个链接时,它会正常工作。
我相信view/javascript/controller代码之所以有效,是因为它在第二次(以及随后的尝试(时有效。它只是第一次在服务器上公然失败;之后,用户就没事了。然而,我想防止"第一次"失败,我想知道问题可能是什么…
- 时机不对
我可能传递信息太早了(或者太晚了,我的网站/服务器无法正确处理(。页面第二次做对了,所以我可能只是在"跳枪",没有再等一段时间让页面加载过程自行解决。(也许我可以摆弄第一页的$(document).ready()
javascript部分,以"延迟"人们点击链接。(
- 代码错误
如果我真的把事情搞砸了,我很乐意承认代码不好。也许是我的javascript函数,也许是我控制器中的代码;无论如何,有些东西正在使该函数调用的第一次传递被拒绝。也许我的代码很糟糕,因为问题不会第二次发生,而且我有一种错误的安全感(即,在页面完全加载后,系统愿意原谅我的代码存在问题(。
- 服务器问题/其他
我想知道我上传最新更改时是否遗漏了什么,或者我是否应该联系我的网络团队,以防需要激活权限才能使网站顺利运行。我已经就其他事情与他们取得了联系,所以我可能会利用今天的机会。
有一个替代方案可以帮助我防止这个问题的发生,但我想找出为什么会发生"第一次"失败。其他类似的操作第一次在网站上失败了,我想把解决这个问题的见解应用到他们身上。
感谢您关注这个问题。祝你今天过得愉快。
您确定要在jQuery.ajax
完成之前调用submitForm();
吗?您的ajax调用是异步的,所以它会在完成之前到达submitForm();
。submitForm();
应该出现在您的success
活动中吗?
- Javascript不工作/正在加载
- 在pjax完成其工作时加载脚本
- 数据表 AJAX 筛选器重新加载数据
- 如何在新加载的页面上执行(下拉)操作
- 根据上一个选项卡的选择器重新加载选项卡
- 获得“中止,因为不接受 0”并使用反应热加载器重新加载整页
- 咕噜咕噜的手表:实时加载重新加载落后 1 步....
- CRM 2011 - 使用 JavaScript 启用潜在顾客实体的工作流加载
- 如何为新加载的元素提供JQuery UI工具提示
- 如何在新加载的页面上使用相同的JavaScript代码(通过重定向)
- 使用PHP或Javascript检测页面刷新或新加载
- 砌体重新加载&reloadItems不起作用
- Javascript语句不工作…获取'加载资源'错误
- 如何使javascript计时器重新加载
- 如何获取新加载的图像's width / naturalWidth
- 将SVG附加到DOM不工作-重新加载资产管道
- Jquery搜索过滤器不工作后加载ajax内容
- 设置变量不工作页面加载,但通过控制台
- 列出并调用firefox扩展中新加载的选项卡中的js函数
- 新加载的javascript文件不能在phantomjs中工作