MVC AJAX POST请求以GET的形式重定向到原始页面
本文关键字:重定向 原始 POST AJAX 请求 GET MVC | 更新日期: 2023-09-27 18:13:05
希望有人能给我指明正确的方向,我整天都在为此挠头,现在长出了一个秃点。我在SO上花了很多时间,但我发现的问题似乎都与我的确切问题无关。
简单地说,我有一个下拉列表,希望让用户能够实时向列表中添加条目。我打算使用AJAX将表单信息发送到控制器,然后将其输入到表中,重新查询,然后作为JSON数组返回到页面,然后我将解析它并替换Select下拉列表中的数据。
然而,会发生POST请求,在数据处理过程中的某个时刻,页面会刷新,数据会作为GET请求附加到URL。
AJAX请求:
$(document).on("click", "#save-new-range", function (e) {
e.preventDefault;
var loc = window.location.href;
var url = stripURL('Data/addRange', loc); // Format the target URL correctly
$.post(url, $("#add-range-form").serialize())
.done(function (response) {
debugger;
alert(response);
});
});
StripURL功能(以防万一!(
function stripURL(url, loc) {
var res = "";
if (loc.search("Surveys/New") !== -1) {
res = loc.replace("Surveys/New", "");
} else if (loc.search("Surveys/Amend") !== -1) {
res = loc.replace("Surveys/Amend", "");
} else if (loc.search("Surveys/") !== -1) {
res = loc.replace("Surveys/Amend", "");
}
if (res.search("#") !== -1) {
res = res.replace("#", "");
}
url = res + url;
return url;
}
控制器(无查询和插入(:
[HttpPost]
public JsonResult addRange(FormCollection fc)
{
{
... Do data processing and query data into a dictionary called res ...
}
return Json(res);
}
调试时,会处理我的控制器操作,并用正确的数据填充res,但由于重定向,从未输入.done((函数。
我很高兴发布完整的控制器,但为了简洁起见,我省略了它。如果你想看,请告诉我。
您使用的是e.preventDefault
,而不是将其作为函数调用。这将不会运行。这就是为什么return false;
与已接受的答案一样工作。使用e.preventDefault()
作为函数调用将不需要return false;
。
$(document).on("click", "#save-new-range", function (e) {
// called as a function
e.preventDefault();
var loc = window.location.href;
var url = stripURL('Data/addRange', loc); // Format the target URL correctly
$.post(url, $("#add-range-form").serialize())
.done(function (response) {
debugger;
alert(response);
});
});
你可以在SO的控制台中这样测试:
$('a').click(function(e){
e.preventDefault();
});
这将停止任何a
标记的默认行为。如果省略函数调用,它将不起任何作用。
$(document).on("click", "#save-new-range", function (e) {
e.preventDefault;
var loc = window.location.href;
var url = stripURL('Data/addRange', loc); // Format the target URL correctly
$.post(url, $("#add-range-form").serialize())
.done(function (response) {
debugger;
alert(response);
});
return false;
});
看看这是否奏效。