1

是否可以将用户重定向到不同的页面/视图并返回 JSON 结果?我有一个 Web 应用程序,它对另一个 asp.net mvc Web 应用程序上的另一个方法进行跨域调用,我想在他们进行调用后将用户重定向到另一个页面/视图,但我也想返回一个 JSON 字符串到调用网络应用程序,表明用户重定向成功或出现错误。我该如何处理这种情况?

这是我可以用一种方法做的事情还是需要拆分?如果是这样,怎么做?

4

2 回答 2

1

如果我理解正确,您在这里有三个系统交互:

  • 客户端 (HTML/JavaScript)
  • 服务器 (ASP.NET)
  • 远程服务器(使用的技术无关紧要)

如果我仍然理解正确,场景是客户端正在向远程服务器发出请求,但服务器需要知道该请求的结果?

由于请求是在 Client 和 Remote Server 之间进行的,因此 Server 不参与,也无法直接接收 Remote Server 的响应。但是客户端可以处理这种交互。一种方法可能是这样的:

  • 客户端向远程服务器发出请求
  • 客户端从远程服务器接收响应,指示错误或执行重定向
  • 如果出现错误,客户端将错误通知服务器(并且可能也会通知用户)
  • 如果重定向,客户端通知服务器成功,然后执行重定向。

在大多数伪代码中,最终可能看起来像这样:

$.ajax({
    url: 'http://remoteserver/request_target'
}).done(function(data, textStatus, jqXHR) {

    // success, notify Server and redirect
    $.post('http://server/success_handler', successData)
     .done(function () {
        window.location.replace('http://remoteserver/redirect_target');
    });

}).fail(function(jqXHR, textStatus, errorThrown) {

    // fail, notify Server
    $.post('http://server/error_handler', errorData);

});

所以首先它对远程服务器执行 AJAX 请求。如果请求成功,它将向服务器执行 AJAX 请求以通知成功,然后在该请求之后执行重定向。如果对远程服务器的请求失败,则向服务器执行 AJAX 请求以通知错误。(successData或者errorData,如果有的话,取决于您需要发送到服务器的任何内容。)

于 2013-11-03T16:57:49.227 回答
1

这就是基本场景所需的全部内容:

$.ajax {
  ..
  ..
  ..
  success: function(data) {
    alert(data.message_for_user);
    // redirect from client
    window.location.replace(data.url_to_redirect);
    // or make another request to your server and redirect directly from server
    makeRequestToRedirectController(data.some_message_for_server)
  }
}
于 2013-11-03T17:01:51.427 回答