2013-04-25 117 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說失敗了,代碼繼續運行。