如何将外部js文件加载为纯文本,并将其赋值给变量作为字符串

3
非常抱歉,如果这是一个愚蠢的问题,但我似乎无法让它工作。如标题所述,我正在尝试加载外部js文件并将其分配为纯文本变量。该项目是一个简单的js“编译器”,将多个js文件拼接在一起并将它们缩小成一个文件。我目前正在使用$.get()方法,并将响应附加到字符串上。
问题是处理以上内容的js文件也需要包含在最终缩小的文件中。我可以很好地加载所有其他文件并将它们拼接在一起,但当我将此主文件加载到自身源js文件时,它似乎会评估并覆盖自身,因此停止了进程。
暂时,我通过将副本作为.txt文件加载来解决了这个问题,但这意味着我必须保持两个文件的最新状态,这不是理想的。
我找到了这篇文章,但它是关于通过标签在头部加载的javascript。
任何帮助都将不胜感激。我很乐意发布代码,但不确定哪些部分会有用。
更新:我可能应该提到该项目需要完全在客户端运行,因此我不能使用PHP/.NET页面。但是,我加载的所有文件都在同一个域中。

你需要使用js文件的URL发出一个ajax请求,然后提取结果。请参考XMLHttpRequest。 - fred02138
只需发送一个AJAX请求。如果由于浏览器限制而无法执行此操作,则通过服务器端脚本进行代理。 - Blender
@NoelDrew:请发布您当前的代码。您是尝试从自己的网站加载文件还是从他人的域名加载? - Blender
我在这里发布了一个简短的示例:http://jsfiddle.net/e8JNu/ - Noel Drew
我正在使用其他人已经建议的相同方法。对于大多数文件,它都可以正常工作。问题是当我将一个文件加载到自身时。我应该补充说,整个过程需要在客户端运行,因此没有php/.NET。 - Noel Drew
显示剩余2条评论
2个回答

0
请注意,$.get()、$.post() 和 $.ajax() 都是同一件事。 $.get 和 $.post 只是 $.ajax() 的简写版本,并带有预设值(显然,一个是 type: "GET",另一个是 type:"POST")。我更喜欢使用 $.ajax,因为其格式可以更加结构化,因此更易于学习和使用。
JavaScript/jQuery 的代码如下:
<script type="text/javascript">

    $(document).ready(function() {
        $.ajax({
            type: "POST",
            url: "loadmyfile.php",
            data: 'filename=js/myscript.js',
            success: function(whatigot) {
                //alert('Server-side response: ' + whatigot);
                $('#myhiddentext').val(whatigot);
            } //END success fn
        }); //END $.ajax
    }); //END $(document).ready()

</script>

重要提示:请注意,您需要在成功函数内完成所有的后AJAX处理。请参阅此链接以获取一些简单的AJAX示例。

请注意,您可以通过在AJAX代码块中指定data:参数来将数据发送到PHP文件中。可选地,您可以省略该行并将文件名硬编码到PHP文件中。

检索到的js文件的文本将作为字符串返回到AJAX success函数(从PHP文件中)中,作为函数参数指定的变量(在本例中称为'whatigot')。您可以随心所欲地使用它;我已经将其存储在一个隐藏的<input>控件中,以防您希望在AJAX成功函数之外检索文本。

PHP代码可能如下所示:

loadmyfile.php

<?php
    $fn = $_POST['filename'];

    $thefile = file_get_contents($fn);
    echo $thefile;

参考资料: PHP file_get_contents


0
尝试使用 Ajax.get()
var script;
$.get('script.js', function(data) {
  script = data;
});

对于 Ajax.get(),它只能在您的域内工作,您无法调用外部域名。如果您的应用程序需要加载外部 JS 文件,则我的猜测是您必须使用 PHP 或另一种服务器端语言。

var script;
$.get('getScript.php', {url: "http://test.com/script.js"}function(data) {
  script = data;
});

getScript.php 文件中,您可以使用 CURLfile_get_contents

我在这里添加了一个解释和一些示例代码:http://jsfiddle.net/e8JNu/ - Noel Drew
我正在使用这个确切的方法,对于大多数文件来说它都能正常工作,但当我将一个文件加载到它本身时,似乎会出现问题。这有意义吗? - Noel Drew
我应该补充说明,我需要整个东西完全在客户端运行,因此我不能从php/.net加载。 - Noel Drew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接