2011-02-18 57 views
0

我想使用JavaScript和jquery基於從數據庫返回的信息構建一個HTML表。我有JSON和數據庫正常工作,但我無法在我的頁面上顯示數據。使用函數使用Javascript設置變量?

這是代碼顯示的數據

var temp; 

var init = function() { 
    $(_getMarketInfo()).appendTo(document.body); 

    // Used for logging 
    temp = $(_getMarketInfo()); 
    console.log(temp); 
}; 

然後獲取和處理數據

function _getMarketInfo() { 
    $.ajax({ 
     url:'scripts/db_getMarketInfo.cgi', 
     dataType:'json', 
     success:function(data, testStatus) { 
      var html = ''; 
      html +='<div class="marketInfoHolder">'; 
      html +='<table class="tbl" border=1>'; 
      html +=' <tr><th>Market Information</th></tr>'; 
      html +=' <tr><td>Market</td></tr>'; 

      for (var i=0;i< data.marketInfo.length; i++){ 
       html += '<tr><td>' + data.marketInfo[i].market_name + '</td></tr>'; 
      } 

      html +='</table>'; 
      html +='</div>'; 

      //used for logging 
      console.log(html); 

      return html; 
     }, 
     error:function(data, textStatus) { 
      alert('There was an error getting market information.'); 
     } 
    }); 
}; 

據控制檯日誌,在html變量確實有正確的HTML代碼表,但是當我查看temp變量時,它會記錄爲[]。看起來,由於某種原因,_getMarketInfo()不能正確地將html返回到temp。

回答

0

我會使用ajax調用成功時觸發的自定義事件。

var init; 

// bind a custom event to the document that is 
// triggered in your ajax success callback 
$(document).bind('init', function (html) { 
    init = html; 

    // Used for logging 
    console.log(init);  
}); 

// run _getMarketInfo in a document ready handler 
// because you are accessing the DOM 
$(document).ready(function() { 
    $(_getMarketInfo()).appendTo(document.body);  
}); 

// your ajax call function 
function _getMarketInfo() { 
    $.ajax({ 
     url:'scripts/db_getMarketInfo.cgi', 
     dataType:'json', 
     success:function(data, testStatus) { 
      var html = ''; 
      html +='<div class="marketInfoHolder">'; 
      html +='<table class="tbl" border=1>'; 
      html +=' <tr><th>Market Information</th></tr>'; 
      html +=' <tr><td>Market</td></tr>'; 

      for (var i=0;i< data.marketInfo.length; i++){ 
       html += '<tr><td>' + data.marketInfo[i].market_name + '</td></tr>'; 
      } 

      html +='</table>'; 
      html +='</div>'; 

      // trigger your custom event with 
      // the html used as a custom parameter; 
      // custom event parameters must be passed 
      // in an array 
      $(document).trigger('init', [html]); 

      // return your html for appending 
      return html; 
     }, 
     error:function(data, textStatus) { 
      alert('There was an error getting market information.'); 
     } 
    }); 
}; 
0

由於ajax運行異步,因此無法從成功函數返回。 此外,如果你包裝在$()中的東西,他們將成爲一個數組,因爲這是jQuery的工作方式。

​​

你也可以把在somekind的命名空間的代碼,把它清理乾淨更

+0

我還建議jQuery.tmpl,如果你想更容易構建html – ullmark 2011-02-18 16:39:35

1

剛剛轉會成功裏面你appendTo邏輯:功能(數據,testStatus){你的Ajax調用

+0

這是比它應該更容易...謝謝! – ThatGuyYouKnow 2011-02-18 19:16:11