在 IE 10 中成功的 XMLHttpRequest 后,无法通过 .Ajax post 到新的操作方法
Unable to post to a new action method via .Ajax right after a successful XMLHttpRequest in IE 10
我正在我的应用程序中添加一项新功能,让用户可以分步完成流程。
第一步
select 下拉值
点击下一步按钮和第 2 步(ajax 请求加载并呈现局部视图,呈现树视图)
点击下一步
步骤 3(通过 XMLHttpRequest 上传文件)
点击下一步
第 4 步(另一个 ajax 请求呈现局部视图)
由于某种原因,此请求永远不会命中控制器操作方法。奇怪的是,如果我 post 到步骤 2 中的操作方法,它会 post 成功,但我对这一步有不同的操作。
我在 IE 10 开发者工具中收到以下警告
SEC7127:重定向被阻止用于 CORS 请求。
XMLHttpRequest: Network Error 0x800c0014, A redirection problem
occurred. SCRIPT7002: XMLHttpRequest: Network Error 0x800c0014, A
redirection problem occurred.
以上错误似乎与这一步之前的XMLhhtprequest有关。我试图将 XMLhttprequest 设置为 NULL 或尝试在其成功事件后将其处置。我在第 4 步中不明白,我仍然可以 post 执行第 2 步的操作,但不能执行其他操作?
第 3 步
function handleFiles() {
var formdata = new FormData(); //FormData object
var xhr = new XMLHttpRequest();
xhr.open('POST', fileUploadURL);
xhr.setRequestHeader('Content-type', 'multipart/form-data');
//Appending file information in Http headers
xhr.setRequestHeader('X-File-Name', document.getElementById('myFile').files[0].name);
xhr.setRequestHeader('X-File-Type', document.getElementById('myFile').files[0].type);
xhr.setRequestHeader('X-File-Size', document.getElementById('myFile').files[0].size);
//Sending file in XMLHttpRequest
xhr.send(document.getElementById('myFile').files[0]);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
$("input[id=filestoredname]").val(xhr.responseText);
alert("file saved..");
}
}
return false;
}
var instrumentSelectionUrl = '@Url.Action("Step2", "ErrorCode")';//step2
var finalTreeViewUrl = '@Url.Action("renderFinalTree", "ErrorCode")';//step3
var fileUploadURL = '@Url.Action("UploadFiles", "ErrorCode")';//step3
$(function () {
$('form').stepy({
backLabel: '<<',
nextLabel: '>>',
finishButton: false,
next: function (index) {
alert(index);
var v = $("#InsIdLst").chosen().val();
if (v == null && index == 2) {
alert("Please select an Instrument");
return false;
}
if (v != null && index == 2) {
var overlay = $('<div></div>').prependTo('body').attr('id', 'overlay');
$.ajax({
type: 'POST',
url: instrumentSelectionUrl,
cache: false,
datatype: "html",
data: $("form").serialize(),
success: function (result) {
$("#errorCodes").html(result);
overlay.remove();
}
});
}
if (index == 4) {
alert("try..");
$.ajax({
type: 'POST',
url: finalTreeViewUrl,
cache: false,
datatype: "html",
data: $("form").serialize(),
success: function (result) {
$("#errorCodesSave").html(result);
}
});
}
}
});
});
所以在第 4 步中,如果我使用
$("#errorCodesSave").load(finalTreeViewUrl, { fileName: $("#filestoredname").val(), $("#InsIdLst").chosen().val();: 1 });
而不是 $Ajax,它对预期的控制器操作执行 post。这对我来说已经足够好了。
我正在我的应用程序中添加一项新功能,让用户可以分步完成流程。
第一步 select 下拉值
点击下一步按钮和第 2 步(ajax 请求加载并呈现局部视图,呈现树视图)
点击下一步
步骤 3(通过 XMLHttpRequest 上传文件)
点击下一步
第 4 步(另一个 ajax 请求呈现局部视图) 由于某种原因,此请求永远不会命中控制器操作方法。奇怪的是,如果我 post 到步骤 2 中的操作方法,它会 post 成功,但我对这一步有不同的操作。
我在 IE 10 开发者工具中收到以下警告
SEC7127:重定向被阻止用于 CORS 请求。
XMLHttpRequest: Network Error 0x800c0014, A redirection problem occurred. SCRIPT7002: XMLHttpRequest: Network Error 0x800c0014, A redirection problem occurred.
以上错误似乎与这一步之前的XMLhhtprequest有关。我试图将 XMLhttprequest 设置为 NULL 或尝试在其成功事件后将其处置。我在第 4 步中不明白,我仍然可以 post 执行第 2 步的操作,但不能执行其他操作?
第 3 步
function handleFiles() {
var formdata = new FormData(); //FormData object
var xhr = new XMLHttpRequest();
xhr.open('POST', fileUploadURL);
xhr.setRequestHeader('Content-type', 'multipart/form-data');
//Appending file information in Http headers
xhr.setRequestHeader('X-File-Name', document.getElementById('myFile').files[0].name);
xhr.setRequestHeader('X-File-Type', document.getElementById('myFile').files[0].type);
xhr.setRequestHeader('X-File-Size', document.getElementById('myFile').files[0].size);
//Sending file in XMLHttpRequest
xhr.send(document.getElementById('myFile').files[0]);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
$("input[id=filestoredname]").val(xhr.responseText);
alert("file saved..");
}
}
return false;
}
var instrumentSelectionUrl = '@Url.Action("Step2", "ErrorCode")';//step2
var finalTreeViewUrl = '@Url.Action("renderFinalTree", "ErrorCode")';//step3
var fileUploadURL = '@Url.Action("UploadFiles", "ErrorCode")';//step3
$(function () {
$('form').stepy({
backLabel: '<<',
nextLabel: '>>',
finishButton: false,
next: function (index) {
alert(index);
var v = $("#InsIdLst").chosen().val();
if (v == null && index == 2) {
alert("Please select an Instrument");
return false;
}
if (v != null && index == 2) {
var overlay = $('<div></div>').prependTo('body').attr('id', 'overlay');
$.ajax({
type: 'POST',
url: instrumentSelectionUrl,
cache: false,
datatype: "html",
data: $("form").serialize(),
success: function (result) {
$("#errorCodes").html(result);
overlay.remove();
}
});
}
if (index == 4) {
alert("try..");
$.ajax({
type: 'POST',
url: finalTreeViewUrl,
cache: false,
datatype: "html",
data: $("form").serialize(),
success: function (result) {
$("#errorCodesSave").html(result);
}
});
}
}
});
});
所以在第 4 步中,如果我使用
$("#errorCodesSave").load(finalTreeViewUrl, { fileName: $("#filestoredname").val(), $("#InsIdLst").chosen().val();: 1 });
而不是 $Ajax,它对预期的控制器操作执行 post。这对我来说已经足够好了。