7

我正在发出这样的 Ajax 请求:

 $(".box01 .selproduct").live("click", function(e) {
    var color = $(this).parent('.box01').find('.color').val();
    var size = $(this).parent('.box01').find('.size').val();
    var pid=$(this).parent('.box01').find('.hdinput').val();
    var pathname = window.location.pathname;
    var data = { submit: "selected",size:size,color:color,pid: pid};
    $.ajax({
        type: "POST",
        url: pathname,
        data: data,
        success: function(data) {

        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {

        },
        complete: function(data) {

        }
    });
    return false;
});

在服务器端,我做了一些这样的代码:

 if (!string.IsNullOrEmpty(HttpContext.Current.Request.QueryString["pid"]))
    {
        var path = HttpContext.Current.Request.Url.AbsolutePath;
        HttpContext.Current.Response.Redirect(path);
    }

Ajax POST 工作正常。我可以在 mozilla 中的 Web 开发人员工具中看到,但页面没有像我想象的那样重定向到其他页面。谁能告诉我我做错了什么?

还是Response.Redirect不能通过 Ajax 调用?

4

2 回答 2

12

是的,据我所知,您不能简单地检测来自客户端的重定向。参考其他类似的答案:

您可以做的一件事是如何从服务器端代码返回指示重定向的内容。类似于以下 JSON:

{
  success: true,
  redirect: true,
  redirectURL = "http://something.com/path/to/good/stuff"
}

如何在服务器端代码中实现上述目标取决于您。

然后在您的客户端代码中,您可以执行以下操作:

  $.ajax({
    type: "POST",
    url: pathname,
    data: data,
    success: function(data) {
      if(data.redirect) {
        window.location = data.redirectURL;
      }
    },
于 2013-11-04T06:37:36.823 回答
6

无法在 WebMethod 中调用 Response.Redirect。相反,您可以使用

 success: function(data) {
     window.location.href="path.aspx";
        }

在 ajax 成功函数中。

如果页面名称本质上是动态的,则从 webmethod 返回页面名称并使用它来重定向页面。

于 2013-11-04T06:34:49.187 回答