2012-11-20 34 views
1

我有一個外部JavaScript文件,我想用它來收集大量文本文件的內容。 JQuery .get()似乎是最明顯的選擇。如果JQuery位於頁面中,我可以使其工作,但當JQuery位於外部文件中時不行。我錯過了一些非常簡單的東西......而我目前正在將正常的JavaScript與JQuery混合在一起,我擔心這種形式很糟糕。在外部文件中使用JQuery獲取文本文件內容

我試圖訪問的所有文件都在同一個文件結構中。目前我已經在我的外部。js以下:

function addPanels() { 
    // eventually loop over list of local HTML files 
    // and do some stuff with the results... 
    fileContents = readHTMLFile(); 
} 

jQuery(function($){ 
    readHTMLFile = $.get('../html/test.html', function(data) { 
     alert('Loaded something'); 
     return(data); 
    }); 
}); 

我的HTML頁面包含以下內容:

<script type="text/javascript"> 
    $(document).ready(function(){ 
     addPanels(); 
    }); 
</script> 

很肯定這是一個RTFM時刻朝着正確的手冊,以便指導/教程將是巨大的!

回答

3

在腳本「readHTMLFile」不被功能「addPanels」之稱,你應該把它們放在同一水平。

該腳本應該工作

<script type="text/javascript"> 
    (function($){ 
     var readHTMLFile = function(url){ 
      var toReturn; 
      $.ajax({ 
       url: url, 
       async: false 
      }).done(function(data){ 
       toReturn = data; 
      }); 
      return toReturn; 
     }; 
     $.addPanels = function(url){ 
      fileContents = readHTMLFile(url); 
     }; 
    })(jQuery); 
</script> 

而在你的頁面,您可以調用它像:

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $.addPanels('../test/test.html'); 
    }); 
</script> 
+0

該溶液這麼想的工作。轉到:http://jsfiddle.net/3FbXu/並打開控制檯。 – nekman

+0

你說得對,我糾正瞭解決方案 –

3

jQuery.get是一個異步函數,條件是當服務器返回執行回調要求的文件。因此,您不能從該方法返回任何數據。

function addPanels() { 
    // will not work 
    fileContents = readHTMLFile(); 
} 

... 

readHTMLFile = $.get('../html/test.html', function(data) { 
    // will not work 
    return(data); 
}); 

然而,這將工作:

var addPanelCallback = function(html) { 
    // append html (or something like that) 
    alert(html); 
}; 

var addPanel = function(url) { 
    $.get(url, addPanelCallback); 
}; 

addPanel('../html/test1.html'); 
addPanel('../html/test2.html'); 

實施例:http://jsfiddle.net/FgyHp/