我目前正在创建一个网站。我遇到的问题是我无法使用Javascript重定向到另一个ASPX页面。这是我的代码:
<asp:Button ID="Save" runat="server" Text="Schedule" CssClass="vs-btn mT10" OnClientClick="return SendFormValuesForXml(); return false;" />
上面的Javascript函数执行AJAX调用,一旦成功,我会重定向到另一个正在执行多项操作的页面。 AJAX的电话就在这里:
var responseString =“”;
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "Default.aspx/MakeXml",
dataType: "json",
data: "{'data':'" + stringToSend + "'}",
async: false,
cache: false,
success: function (result) {
debugger;
window.location.reload(true);
var valuationUrl = window.location.protocol + "//" + window.location.host + "/ValuationList.aspx";
window.location.assign(valuationUrl);
return false;
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("Status: " + textStatus); alert("Error: " + errorThrown);
}
});
现在一切都正常发生,除了成功函数中的重定向。知道什么是干扰javascript? 其他信息:
- 该页面或网站的任何其他页面都没有更新面板。
- 除了错误的Chrome'jquery.min.map'找不到错误外,浏览器不会抛出任何错误。
醇>
到目前为止我尝试过:
- document.location.replace(valuationUrl);
- location.href = valuationUrl;
- $(location).attr('href',valuationUrl);
醇>
堆栈上提到的所有其他选项溢出了这个link。
更新:我采用了错误的解决方案 在做了很多事情之后,比如拿一个不可见的按钮并在Click to redirect页面和其他东西上运行服务器端功能,所有这些都失败了。 我做的是我设置一个隐藏字段为0,然后将其值更新为1.稍后当同一页面加载时,我检查它的值是否为1,所以我强制重定向到下一页。
答案 0 :(得分:1)
尝试使用window.location = valuationUrl;
- 如果有效,那么由于您重定向到与重定向域不同的域,您将遇到安全违规。
Mozilla Developer Network Location.Assign
Location.assign()方法使窗口加载并在指定的URL处显示文档。
如果由于安全性违规而无法进行分配,则会抛出SECURITY_ERROR类型的DOMException。如果调用方法的脚本的原点与Location对象最初描述的页面的原点不同,则会发生这种情况,主要是当脚本托管在不同的域上时。
Mozilla Developer Network Location.Replace
Location.replace()方法用当前提供的URL替换当前资源。与assign()方法的不同之处在于,在使用replace()之后,当前页面将不会保存在会话历史记录中,这意味着用户无法使用后退按钮导航到该页面。
如果由于安全性违规而无法进行分配,则会抛出SECURITY_ERROR类型的DOMException。如果调用方法的脚本的原点与Location对象最初描述的页面的原点不同,则会发生这种情况,主要是当脚本托管在不同的域上时。
答案 1 :(得分:1)
window.location.reload(true)导致页面从服务器重新加载。我很确定这意味着它不会继续执行该功能的其余部分。
答案 2 :(得分:1)
试试这个。
success: function (result) {
var valuationUrl = window.location.protocol + "//" + window.location.host + "/ValuationList.aspx";
window.location.href=valuationUrl;
return false;
},