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((函数。

我很高兴发布完整的控制器,但为了简洁起见,我省略了它。如果你想看,请告诉我。

MVC AJAX POST请求以GET的形式重定向到原始页面

您使用的是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;
});

看看这是否奏效。