2017-01-24 223 views
0

我想創建一個jQuery/ajax腳本。其目的是從數據庫獲取數據,比較successFunc中的結果,並對mvc actionResult執行下一個ajax調用,這將根據結果呈現視圖。由於某種原因,它不起作用。Ajax調用失敗

function GetPageData() { 
$.ajax({ 
    type: "Post", 
    url: '/Track/GetPageData', 
    dataType: "json", 
    data: param = "", 
    success: successFunc, 
    error: errorFunc 
}); 
function successFunc(data, status) { 
    alert('data; '+data+', '+'status: '+status); 
    if (data == 'contact') { 
     $.ajax({ 
      type: "Post", 
      url: '/Track/Contact', 
      dataType: 'json', 
      success: successF, 
      error: errorF 
     }); 
     function successF() { 
      alert('services') 
     } 
     function errorF() { 
      alert('servicesFail') 
     } 
    } 

一個ActionResults方法:

public ActionResult Contact() 
    { 
     return View(); 
    } 

在調試過程中,我可以看到調用,以聯繫的ActionResult(),但它並沒有渲染視圖。任何想法爲什麼代碼不工作?

+4

你還沒有解釋什麼是不工作的,哪些錯誤消息的GET。一個是你得到一個'500內部服務器錯誤',因爲你的第二個Ajax調用指定'dataType:'json',但是你的方法返回html(它需要是'dataType:'html'' - 或者只是省略選項並讓ajax函數可以實現) –

+4

基本上,如果你請求JSON,你的服務器動作方法應該返回一個JSON字符串。返回整個視圖違背了Ajax與JSON(這是爲了保持數據傳輸很小)的整個使用點。 –

+0

@Stephen Muecke我想這樣的代碼會使HttpRequest'/ Track/Contact'並呈現所需的視圖。這是我的預期,但它不起作用。 – Zet

回答

0

在第一次調用Ajax之後,您還沒有結束GetPageData函數。下面把它寫下來,並檢查 -

function GetPageData() { 
    debugger; 
    $.ajax({ 
     type: "Post", 
     url: '/Track/GetPageData', 
     dataType: "json", 
     data: param = "", 
     success: successFunc, 
     error: errorFunc 
    }); 
} 
    function successFunc(data, status) { 
      $.ajax({ 
       type: "Post", 
       url: '/Track/Contact', 
       dataType: 'json', 
       success: successF, 
       error: errorF 
      }); 

    } 
    function successF() { 
     alert('services'); 
    } 
    function errorF() { 
     alert('servicesFail'); 
    } 
    function errorFunc() { 
     alert('servicesFail'); 
    } 
1

你的Ajax調用來獲取視圖應該遵循下面的模式,這是一個我用了一個密碼重置:

$.ajax({ 
     url: '@Url.Action("ActionName","ControllerName")', 
     cache: false, 
     data: { userId: userId, newPassword: password }, 
     type: 'GET', 
     success: function (data) {       
      $('#unlockResult').html(data); 
     }, 
    }); 

行動看起來是這樣的並返回一個PartialView

public async Task<ActionResult> UnlockUserAccount(string userId, string newPassword) 
    { 
    //other stuff here 
    return PartialView("_AjaxResponse"); 
} 

在AJAX調用的success一部分data參數是第ËHTML的PartialView,這是再注入的div我在頁面:

<div id="unlockResult"></div> 

在我的情況下,PartialView返回位成功/失敗被添加到現有的HTML頁面。正如評論中所說,如果你想加載一個全新的頁面,那麼你不想使用Ajax。

0

最後我用它爲我工作的解決方案:

function GetPageData() { 
$.ajax({ 
    type: "Post", 
    url: '/Track/GetPageData', 
    dataType: "json", 
    data: param = "", 
    success: successFunc, 
    error: errorFunc 
}); 
function successFunc(data, status) { 
    alert('data; '+data+', '+'status: '+status); 
    if (data == 'services') { 
     window.location = "/Track/Services"; 
    } 
    else if (data == 'contact') { 
     window.location = "/Track/Contact"; 
    } 
    else{ 
     window.location = "/Track/About"; 
    } 
} 

謝謝您的幫助

+0

ajax的全部用途是保持在同一頁面上。要使用ajax然後使用'window.location'來進行重定向是無稽之談。 –