我正在构建一个具有一些简单功能的网站,我遇到了一些问题。我无法提供任何示例代码,因为我不知道问题出在哪里,从技术上讲,网站没有崩溃。
该网站的前端是html和javascript,后端我正在使用ASP.Net和C#。
页面上有一个按钮,它将在javascript中触发一个功能。然后,该函数将调用后端aspx文件(例如,myFunction.aspx)并生成输出文件供用户下载。
一切都很好。我得到了预期的结果,并能够毫无问题地下载输出文件。
在我尝试重新运行此功能之前,我没有注意到这个问题。
我再次按下按钮但它没有做任何事情(我也使用Httpfox所以我知道它没有调用任何东西)
我意识到在没有刷新页面的情况下我无法再次运行该功能。刷新页面后效果很好。
任何人都能用这种方式解释原因吗?我该如何调试此问题?我甚至不知道问题是与前端还是后端有关。
感谢您的帮助。
修改
这就是我创建按钮的方式。
<button dojoType="dijit.form.Button" type="button" onclick ="myJSFunction('uploadForm')">Generate</button>
这就是函数调用asp后端的方式
var myJSFunction= function (formId) {
dojo.io.iframe.send
({
url: 'myURL/myFunction.aspx?parameter=p',
form: dojo.byId(formId),
method: "POST",
handleAs: "text",
load: function (response, ioArgs) {
dojo.byId("timeStamp").value = response;
}
error: function (response, ioArgs) {
alert("Failure:" + response);
}
});
}
编辑2
我只是注意到一些有趣的东西。
我一直在使用HttpFox在Firefox中运行,但没有收到任何错误消息。然后我尝试使用F12在Chrome中运行它,我收到了红色警报。
在Chrome中,在“网络”标签下,状态显示为“已取消”,但我仍在获取输出。
怎么会发生这种情况?我怎样才能找到问题所在?
答案 0 :(得分:0)
检查您的javascript控制台,确保您在页面上没有任何错误。否则发布你的asp.net标记按钮和javascript函数。
编辑: 尝试从javascript函数返回false。这将阻止默认浏览器行为执行(What's the effect of adding 'return false' to a click event listener?)
答案 1 :(得分:0)
解决方法可能是取消绑定然后重新绑定元素上的click事件,这样每次点击都实际上是“第一个”,以避免任何dojo或其他任何东西可能无法控制。我不知道道场,但基于http://dojotoolkit.org/reference-guide/1.9/dojo/on.html#dojo-on,以下内容应该是正确的:
var updateHandle;
var myJSFunction= function (formId) {
updateHandle.remove();
dojo.io.iframe.send
({
url: 'myURL/myFunction.aspx?parameter=p',
form: dojo.byId(formId),
method: "POST",
handleAs: "text",
load: function (response, ioArgs) {
dojo.byId("timeStamp").value = response;
updateHandle = on(your.buttonElement, "click", function(){
myJSFunction(formId);
});
}
error: function (response, ioArgs) {
alert("Failure:" + response);
}
});
}
updateHandle = on(your.buttonElement, "click", function(){
myJSFunction("myFormId");
});
答案 2 :(得分:0)
谢谢大家的帮助和建议。
我找到了问题的解决方案。我需要的只是前端代码的一行。
dojo.io.iframe._currentDfd = null; //add this line
dojo.io.iframe.send
({...
});
感谢您的帮助。