2012-11-20 29 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/