【问题标题】:How to load an external js file as plain text and assign to variable as a string如何将外部 js 文件作为纯文本加载并作为字符串分配给变量
【发布时间】:2013-08-26 18:39:27
【问题描述】:

如果这是一个愚蠢的问题,我真的很抱歉,但我似乎无法让它发挥作用。正如标题所说,我正在尝试加载一个外部 js 文件并将其作为纯文本分配给一个变量。该项目是一个简单的 js“编译器”,它将多个 js 文件拼接在一起并将它们缩小为一个。我目前正在使用 $.get() 方法并将响应附加到字符串。

问题是处理上述问题的js文件也需要包含在最终的缩小文件中。我可以加载所有其他文件并将它们拼接在一起就好了,但是当我将这个主文件加载到自身中以获取 js 文件时,它似乎会评估并覆盖自身并因此停止该过程。

目前我通过将副本加载为 .txt 文件解决了这个问题,但这意味着我必须保持两个文件是最新的,这并不理想。

我找到了this article,但它指的是通过头部的脚本标签加载的javascript。

任何帮助将不胜感激。我会很乐意发布代码,但不确定哪些代码有用。

更新:我可能应该提到该项目需要完全在客户端运行,所以我不能使用 PHP/.NET 页面。我加载的所有文件都在同一个域中。

【问题讨论】:

  • 您需要使用 js 文件的 URL 发出 ajax 请求,然后提取结果。请参阅 XMLHttpRequest。
  • 只需发送一个 AJAX 请求。如果由于浏览器限制而无法做到这一点,请通过服务器端脚本代理它,
  • 如果有帮助,我目前正在使用 jQuery get() 方法加载 js 文件。对于大多数文件,我只是将响应附加到字符串变量。但是当我将主 js 文件加载到自身时,它就全部中断了。
  • @NoelDrew:发布您当前的代码。您是否尝试从您的站点或其他人的域中加载文件?
  • 发布您的代码或创建一个 jsFiddle,以便我们可以添加到其中并向您展示新的 AJAX 代码以及您已有的内容。

标签: javascript jquery


【解决方案1】:

注意 $.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 后处理。 See this link 一些简单的 AJAX 示例。

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

检索到的 js 文件的文本返回到 AJAX success 函数(来自 PHP 文件)作为指定为函数参数的变量中的字符串(在本例中,称为“whatigot”)。用它做你想做的事;我已将其存储在隐藏的 &lt;input&gt; 控件中,以防您希望在 AJAX 成功函数之外检索文本。

PHP 看起来像这样:

loadmyfile.php

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

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

参考资料: PHP file_get_contents

【讨论】:

    【解决方案2】:

    尝试使用 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

    【讨论】:

    • 我在这里添加了解释和一些示例代码:jsfiddle.net/e8JNu
    • 我正在使用这种精确的方法,对于大多数文件来说它工作正常,但是当我将文件加载到自身时它似乎会中断。这有意义吗?
    • 我应该补充一点,我需要整个东西完全在客户端运行,所以我无法从 php/.net 加载
    猜你喜欢
    • 2016-03-07
    • 2013-07-15
    • 2016-08-25
    • 1970-01-01
    • 2021-08-03
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多