2012-07-13 109 views
1

我有一個網頁,當它被加載時發出ajax請求,從後端獲取JSON []格式的一些數據並將其顯示在頁面上。該網頁與MVC .NETAJAX請求不在js中呈現

加載從後端事件的函數生成:

function initEvents() { 
    $.ajax({ 
     url: '/Work/GetEvents/' + id, type: "GET", dataType: 'json', 
     success: function (data) { 
      events = data; 
     }, 
     error: function(data) { 
      // Note: hardcoded JSON event in here 
      events = hardcodedEvents; 
     }, 
     complete: function(data) { 
      // Add events 
      for (var i = 0; i < events.length; i++){ 
       addEvent(events[i]); 
      } 
     } 
    }); 
} 

當我做請求失敗(即更改URL指向虛假數據) - 它會在error: function(data) - 這樣的硬編碼的JSON對象加載罰款,然後它會在「完整:功能(數據)`和1

但是增加了事件1,當我使用了正確的URL,並獲得事件從後端,似乎事件來得太晚;就像它退出complete部分一樣。問題是:爲什麼會發生這種情況?每當回覆回覆時,我都認爲加載了complete。我相信這個錯誤嗎?我該如何解決這個問題,以便將事件從後端加載到頁面中?

謝謝!

+1

請發佈JSON響應! :) – Nullpo 2012-07-13 00:20:41

回答

2

events未定義在complete事件的範圍內。您應該將events數據傳遞給另一個函數,或者只需將addEvent邏輯移至事件處理函數內。例如:

function onEventData(data) { 
    for (var i = 0; i < data.length; i++){ 
     addEvent(data[i]); 
    } 
} 

function initEvents() { 
    $.ajax({ 
     url: '/Work/GetEvents/' + id, type: "GET", dataType: 'json', 
     success: onEventData, 
     error: function(data) { 
      // Note: hardcoded JSON event in here 
      onEventData(hardcodedEvents); 
     } 
    }); 
} 

注意,請求完成(成功和錯誤回調後執行)時complete被調用。由於您只需要爲每個請求運行一次,因此您不應在此情況下使用它。

1

它看起來像一個範圍問題。將您完整的()的代碼放到一個單獨的函數,並從兩者的成功稱之爲()和錯誤():

function renderEvents(data) { 
    // Add events 
    for (var i = 0; i < data.length; i++){ 
     addEvent(data[i]); 
    } 
} 

function initEvents() { 
    $.ajax({ 
     url: '/Work/GetEvents/' + id, type: "GET", dataType: 'json', 
     success: function (data) { 
      renderEvents(data); 
     }, 
     error: function(data) { 
      // Note: hardcoded JSON event in here 
      renderEvents(hardcodedEvents); 
     } 
    }); 
} 

編輯:固定變量名renderEvents()。

+0

我認爲你有正確的想法,也許一些語法問題BC你的版本不工作Hamish的。 tx讓大開眼界! – Adrian 2012-07-13 02:00:43

+0

啊是的,我忘了將「events」重命名爲「data」。更新了答案。好吧,很高興它現在正在工作! – Scotty 2012-07-13 04:03:31