Перенаправить на другую страницу после вызова Ajax?

так что это трудно для меня, чтобы попытаться объяснить. У меня есть страница бритвы, которая при нажатии кнопки вызывает функцию javascript, которая вызывает ajax-вызов обработчика в бэкэнде. Обработчик делает некоторые вещи и получает идентификатор, который я хочу передать на другую страницу. Я пытаюсь использовать функцию RedirectToPage в бэкэнде, но экран никогда не открывается. Он успешно вызывает обработчик, но когда обработчик возвращает значение, ничего не происходит. Есть ли способ сделать это?

Вот код javascript/ajax, который вызывается при нажатии кнопки.

@section scripts{
<script>

// Get the account ID Data from the row selected and return that to the program.
function getIDData(el) {        

    var ID = $(el).closest('tr').children('td:first').text();
    var iddata = {
        'ID': ID
    }        

    console.log(iddata);
    return iddata;
}

// Submit the data to a function in the .cs portion of this razor page.
$('.copybtn').click(function () {
    var accountid = JSON.stringify(getIDData(this));
    $.ajax({
        url: '/Copy_Old_Account?handler=CopyData',
        beforeSend: function (xhr) {
                        xhr.setRequestHeader("XSRF-TOKEN",
                                $('input:hidden[name="__RequestVerificationToken"]').val());
                },
        type: 'POST',
        dataType: 'json',            
        data: { offenderid: offenderid },    
        success: function (result) { 

        }, 
    });
});

</script>
}

Для моего кода за кодом, который я вызываю из вызова ajax, это ниже здесь:

public ActionResult OnPostCopyData (string accountid)
{
   // Do my other stuff here
   return RedirectToPage("Account_Information", new { id = account.Account_ID });
}

Любая помощь будет оценена по достоинству, и если это не имеет смысла, я могу попытаться прояснить любые вопросы.


person Jestes    schedule 17.08.2018    source источник
comment
Вы пытались вернуть идентификатор, а затем перенаправить в состоянии успеха из запроса ajax?   -  person joseatchang    schedule 17.08.2018
comment
@joseatchang Я этого не пробовал и точно не знаю, как это сделать. У вас есть примеры, на которые я мог бы посмотреть?   -  person Jestes    schedule 17.08.2018
comment
посмотрите на первый ответ, он имеет в виду передачу объекта методу ajax, успех сработает, как только он получит положительный ответ на запрос.   -  person joseatchang    schedule 17.08.2018
comment
Ванильная HTML-форма может быть лучшим выбором, чем ajax, поскольку вы не пытаетесь отправлять/получать данные без перезагрузки страницы.   -  person James    schedule 17.08.2018
comment
Возможный дубликат Как управлять запросом на перенаправление после вызов jQuery Ajax   -  person Erik Philips    schedule 18.08.2018
comment
Весь смысл использования ajax заключается в том, чтобы остаться на одной странице. Если вы хотите перенаправить, не используйте ajax - это бессмысленно   -  person    schedule 18.08.2018


Ответы (2)


Я думаю, это то, что вы хотите, я сделал что-то подобное в проекте MVC 5 и еще не тестировал его в Razor Pages:

Это будет ваш метод, обратите внимание, что вы должны добавить свой контроллер в Url.Action, и я лично не пробовал передавать параметр вместе с URL-адресом, но я думаю, что он будет работать нормально

[HttpPost]
public ActionResult SubmitSomething()
{
    return Json(new { redirectUrl = Url.Action("Account_Information", "YOUR_CONTROLLER_NAME", new { id = account.Account_ID }) });
}

И тогда это будет ваш запрос Ajax, я обновил часть success

// Submit the data to a function in the .cs portion of this razor page.
$('.copybtn').click(function () {
    var accountid = JSON.stringify(getIDData(this));
    $.ajax({
        url: '/Copy_Old_Account?handler=CopyData',
        beforeSend: function (xhr) {
                        xhr.setRequestHeader("XSRF-TOKEN",
                                $('input:hidden[name="__RequestVerificationToken"]').val());
                },
        type: 'POST',
        dataType: 'json',            
        data: { offenderid: offenderid },    
        success: function (result) { 
            if (result.redirectUrl !== undefined) {
                window.location.replace(result.redirectUrl);
            } else {
                // No redirect found, do something else
            }
        }, 
    });
});

Это не проверено, поэтому я могу только надеяться, что это работает для вас прямо сейчас.

Изменить: действие Url.Action обновлено для использования имен и параметров представления OP

person Ryan Taite    schedule 17.08.2018
comment
этот ответ помог мне получить то, что мне нужно. Я по какой-то причине не мог заставить url.action работать на меня, но я продолжал настраивать его, пока не получил свой ответ ниже: return new JsonResult(new { path = Account_Information?= + offender.Account_ID.ToString()}); для моего ajax я использовал window.location.replace, как указано в вашем ответе, и это сработало отлично. - person Jestes; 20.08.2018

Редирект на страницу возвращает ответ 301, который будет в формате:

HTTP/1.1 301 Moved Permanently
Location: http://www.example.org/index.asp

Чтобы перенаправить после вызова ajax, вы можете перенаправить на запрошенный URL-адрес:

success: function (result) { 
window.location = result.getResponseHeader('Location');
}
person Aman B    schedule 17.08.2018
comment
Как продолжить вызов ajax после перенаправления на другую страницу в PHP? Мой вызов ajax выполняет очень сложную задачу, и это займет много времени. Итак, можно ли запустить вызов ajax после перенаправления страницы? Я делаю вызов ajax при нажатии кнопки отправки, и после этого страница перенаправляется на другую страницу, а затем запускается мой вызов ajax. - person jd savaj; 09.12.2019