2013-04-25 103 views
2

我想从视图中打一个控制器中的动作,让它返回一个结果。但是,我总是会收到“请求失败”,然后控制器中的操作代码会执行。我想在视图中使用:Ajax - mvc请求总是失败

$("#State").change(function() { 
     if ($(this).val() != "Va") { 
      $.ajax({ 
       url: '@Url.Action("ProcessOrder","Checkout")', 
       type: 'POST', 
       success: function(result) { 
        if(result.success) { 
         alert("good " + result);  
        } else { 
         alert("bad " + result); 
        } 
       }, 
       error: function() { 
        alert("request failed"); 
       } 
      }); 

     } else { 
      formSwitcher($(this).val()); 
     } 

    }); 

而这个控制器:

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult ProcessOrder() 
    { 
     string sURL = @"https://someUrl/?OrderId=" + Id ; 
     var badUrl = string.Empty; 
      try 
      { 
       Response.Redirect(sURL, true); 
       HttpWebRequest request = null; 
       HttpWebResponse httpWebResponse = null; 
       request = HttpWebRequest.Create(sURL) as HttpWebRequest; 
       request.Method = "GET"; // Supports POST too 
       httpWebResponse = (HttpWebResponse)request.GetResponse(); 
       return Json(new { success = true }); 
      } 
      catch (Exception ex) 
      { 
       badUrl = "~/Shared/error.aspx"; 
      } 
      return Json(new { success = false, error = badUrl }); 
    } 

我在做什么错?

+1

首先,永远不要从try catch中返回或重定向。重定向将导致错误。 – 2013-04-25 22:33:12

+0

是ajax调用控制器吗? – Nighil 2013-04-26 04:21:20

+0

是 - 请求失败的提示显示,然后控制器代码运行 – user1069733 2013-04-26 13:12:17

回答

1

所以问题是Response.Redirect(sURL,true);抛出了一个异常,它在被捕获之前被ajax捕获。结果是ajax说失败了,代码继续运行。