使用pushState里面的ajax成功函数

时间:2018-04-13 23:33:40

标签: javascript jquery ajax pushstate

如果ajax调用成功返回,我想在当前url的末尾附加一个param。在这种情况下,我们可以找回已经持久存入数据库的对象的标识符,然后将此标识符附加到url。

如果取消注释行curationNotes,则问题data window.history.pushState({}, null, newHref);丢失了。这意味着我们无法在控制器中获得“params.curationNotes”。当我们尝试在控制器内部解析时,params.curationNotes是表单上用户提供的值的映射,为null

以下是我正在处理的代码段。

$('#btnSave').on("click", function(event) {
if ($('#curationNotesForm')[0].checkValidity()) {
    var curationNotes = buildCurationNotesTC();
    "use strict";
    event.preventDefault();
    $.ajax({
        dataType: "text",
        type: "POST",
        url: $.jummp.createLink("curationNotes", "doAddOrUpdate"),
        cache: true,
        data: {
            curationNotes: curationNotes,
            model: "${id}"
        },
        processData: true,
        async: true,
        beforeSend: function() {
            $('#txtStatus').text("The curation notes are being saved. Please wait...");
        },
        success: function(response) {
            var response = JSON.parse(response);
            var href = window.location.href;
            if (href.indexOf("&cnId=") < 0) {
                var newHref = href + "&cnId=" + response['cnId'];
                //window.history.pushState({}, null, newHref);
            }
            $('#txtStatus').text(response['message']);
        },
        error: function(jqXHR, textStatus, errorThrown) {
            // TODO: the error message doesn't show properly
            $('#txtStatus').text("Error: ", jqXHR.responseText + textStatus + errorThrown + JSON.stringify(jqXHR));
        }
    });
} else {
    $('#txtStatus').text("Please check required fields and click Save button again...");
}
});

如果我对此行window.history.pushState({}, null, newHref);发表评论,则代码工作正常。

注意:此代码段在Linux上的任何Web浏览器中都能正常运行,但无法在Windows 10的任何Web浏览器中运行。这对我来说实际上很荒谬。

你有没有遇到过这个问题的经历?

0 个答案:

没有答案