2012-06-10 105 views
1

我有這些功能。我的目標是因爲我想定製加載消息jQuery和Ajax響應函數

function loadContent(url) 
{ 
    $('body').html('Loading'); 
    content = load(url); 
    $('body').html(content); 
} 

function load(url) 
{ 

    var result = null; 
    var scriptUrl = url; 
    $.ajax({ 
     url: scriptUrl, 
     type: 'get', 
     dataType: 'html', 
     async: false, 
     success: function(data) { 
      result = data; 
     } 
    }); 
    return result; 
} 

現在,我稱之爲loadContent功能的負載功能分離到腳本的其餘部分:

$(document).ready(function(e) { 
    loadContent('index.php');  
}); 

的問題是在這條線:

content = load(url); 

因爲函數load()覆蓋加載消息。

我該如何解決這個問題? 謝謝你們!

+1

*「因爲函數load()覆蓋了加載消息」*,不太清楚這意味着什麼。發生了什麼,你期望發生什麼?爲什麼你仍然在使用同步請求? –

回答

1

由於您的ajax成功需要一段時間才能從服務器獲取數據,因此您的返回將始終爲空,即未定義。所以你需要在ajax成功函數中加載內容。

function beforeLoad(){ 
    $('body').html('Loading'); 
} 

function loadContent(data) 
{ 
    $('body').html(data); 
} 

function load(url) 
{ 
    var result = null; 
    var scriptUrl = url; 
    $.ajax({ 
     url: scriptUrl, 
     type: 'get', 
     dataType: 'html', 
     async: false, 
     success: function(data) { 
      result = data; 
      loadContent(result); 

      // You can also set result as html without calling a loadContent 

      $('body').html(data); 
     } 
    }); 
} 

$(document).ready(function(e) { 
    beforeLoad(); 
    load('index.php');  
}); 
+0

'result = data;'? –

+0

此請求沒有理由再次同步,因爲您(正確)不再嘗試返回任何內容 – nbrooks

0

試試這個:

function load(url) 
{ 
    return $.ajax({ 
     url: url, 
     type: 'get', 
     dataType: 'html', 
     async: false 
    }).responseText; 
} 
0

你不能嘗試和使用數據,直到AJAX事件已成功返回。試試這個,看看它是否有幫助。

function loadContent (url) { 
    var content = {}; 
    $('body').ajaxStart(function() { 
     $(this).html('Loading'); 
    }).ajaxSuccess(function() { 
     $(this).html(content.key); 
    }).ajaxError(function() { 
     $(this).html('Error'); 
    }); 

    load(url, content); 
} 

function load(url, content) 
{ 
    var scriptUrl = url; 
    $.ajax({ 
     url: scriptUrl, 
     type: 'get', 
     dataType: 'html', 
     success: function(data) { 
      content['key'] = data; 
     } 
    }); 
}