Javascript ASP.NET MVC/jQuery/AJAX:链接第一次无法工作,但第二次可以工作(页面重新加载后)
前言 对于这个问题,我有一个MVC部分观点。该视图有一个显示文档列表的部分。每个文档都有一个超链接:单击该超链接时,用户将进入第二个页面视图,其中显示其他信息 该链接位于无序列表中:Javascript ASP.NET MVC/jQuery/AJAX:链接第一次无法工作,但第二次可以工作(页面重新加载后),javascript,jquery,html,ajax,asp.net-mvc,Javascript,Jquery,Html,Ajax,Asp.net Mvc,前言 对于这个问题,我有一个MVC部分观点。该视图有一个显示文档列表的部分。每个文档都有一个超链接:单击该超链接时,用户将进入第二个页面视图,其中显示其他信息 该链接位于无序列表中: <a style="text-decoration:underline;" onclick="sendToDocketSearch('@currentDocument.DktYear','@currentDocument.DktSequence','@currentDocument.DktSubActionI
<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>
请注意,页面/视图/表单是在运行以下控制器方法后提交的:
上述控制器方法运行;然后,由于表单已提交,因此会发生页面的HttpPost操作。在我的本地电脑上运行时,会单击链接并加载下一页,不会出现戏剧效果
问题
当我将代码上传到dev/test服务器时,问题就开始了。我不知道在对活动网站进行故障排除时如何使用断点,所以我使用浏览器开发工具来监视网络流量
在my localserver上运行网站时单击链接时,该过程将继续:
- 超链接将我带到一个方法,在那里我传递要搜索的信息
- 页面/视图/表单已提交
- 控制器重定向我要去的地方
$(document).ready()
javascript部分来“延迟”人们点击链接。)
感谢您关注这个问题。祝您度过愉快的一天。您确定要调用
submitForm()在jQuery.ajax
完成之前?您的ajax调用是异步的,因此它将命中submitForm()代码>在它有时间完成之前。应该submitForm()代码>是否在您的成功事件中?调试一个实时站点将通过日志记录完成,您应该写入日志文件以查看幕后发生的事情。这可能是一个好的开始。对于JS,只需登录到控制台,对于您的后端代码,您可以随时登录到事件查看器。在JS中,您只需内联编写console.log(您要记录的内容)
,其中您要记录的内容几乎是您能想到的任何内容。事件查看器将使用系统定义的对象,您可以在msdn文档中找到该对象。希望这有点帮助。使用chromes调试器,只需在查看网页时点击F12。如果你正在做任何与网络相关的事情,这是学习的最高价值。太棒了。非常感谢你的帮助。我现在就要调试了。还有一件值得一提的事情,使用dev工具窗口,您可以在处理实时页面时添加和删除JS。通过这种方式,您不必进行本地更改并部署它们,只需执行所需的操作,然后在解决问题时更新代码库。我尝试将submitForm()
javascript函数放入我的success
事件中。当我单击触发该调用的链接时,它没有提交表单。然而,你的回答提出了一个极好的观点:时间似乎是问题的一部分。我可以尝试另一个功能,它可能会绕过这个问题;我只是想弄清楚为什么会发生这种事。(顺便说一句:submitForm()
对我来说只是一个快速的fn,相当于$('form')。submit()
)你的成功可能会失败,因为你的ajax调用期望返回json
,但是你返回了View()
每个jQuery函数都有submitForm()
调用。我尝试使用async:false
,函数的行为是:运行jQuery.ajax
调用,然后运行我的submitForm()。我肯定可以继续进一步检查我的语法。。。我将把你的回答记为我的答案。谢谢你
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);
}