什么可比较的Javascript函数无法引用像PHP include()这样的文件?

时间:2009-06-09 18:18:12

标签: php ajax include

使用Javascript引用或包含文件的最佳方法是什么,寻找PHP的include()能力的最接近的功能。

4 个答案:

答案 0 :(得分:7)

我会查看Javascript equivalent for PHP's include

  

本文是“移植”的一部分   PHP到Javascript'项目,其目标   缩小发展之间的差距   对于PHP&的JavaScript。

没有直接的等效内容 - 您可以使用我上面链接的功能,也可以使用document.write写出一个新的script标记,其中src指向您希望的文件包括。

编辑:以下是我的意思的基本示例:

function include(path) {
    document.write(
        "<script type=\"text/javascript\" src=\"" + path + "\"></script>"
    );
}

编辑2:呃,这是一个多么丑陋的例子 - 这是一个更好的例子:

function include(path) {
    script = document.createElement("script");
    script.setAttribute("type", "text/javascript");
    script.setAttribute("src", path);

    if (head = document.getElementsByTagName("head")[0]) {
        head.appendChild(script);
    }
}

document.write是一种做事的hackish方式,我不应该推荐它。如果你选择我的一个例子,请使用第二个。

答案 1 :(得分:0)

我有一个脚本,我写了一段时间(使用Mootools),允许一个动态包含javascript文件(加载后使用回调函数)。如果您愿意,可以修改它以使用您选择的库。

注意gvi前缀只是我的命名空间,而gvi.scripts是一个包含页面上当前包含的所有javascript文件的数组,如果需要,可以删除它们。此外,可以删除filename功能,这只是为了让我的生活更轻松[require('some-script') vs require('js/some-script.js')]。

//if dom isn't loaded, add the function to the domready queue, otherwise call it immediately
gvi.smartcall = function(fn) {
    return (Browser.loaded) ?  fn() : window.addEvent('domready', fn);
}

//For dynamic javascript loading
gvi.require = function(files, callback, fullpath) {
    callback = callback || $empty;
    fullpath = fullpath || false;
    var filename = function(file) {
        if (fullpath == true) return file;
        file = ( file.match( /^js\/./ ) ) ? file : "js/"+file;
        return ( file.match( /\.js$/ ) ? file : file+".js" );
    }

    var exists = function(src) {
        return gvi.scripts.contains(src);
    }

    if ($type(files) == "string") {
        var src = filename(files);

        if (exists(src)) {
            gvi.smartcall(callback);
        } else {
                        new Asset.javascript( src, {
                'onload' : function() {
                    gvi.scripts.push(src);
                    gvi.smartcall(callback);
                }
            });
        }

    } else {
        var total = files.length, loaded = 0;
        files.each(function(file) {
                        var src = filename(file);

            if (exists(src) && loaded == total) {
                gvi.smartcall(callback);

            } else if (exists(src)) {
                loaded++;
            } else {
                            new Asset.javascript( src, {
                    'onload' : function() {
                        gvi.scripts.push(src);
                        loaded++;
                        if (loaded == total) gvi.smartcall(callback);
                    }
                });
            }
        });
    }
}

你称之为

gvi.require('my-file', function() {
  doStuff();
});

//or
gvi.require(['file1', 'file2'], function() {
  doStuff();
});

答案 2 :(得分:0)

答案 3 :(得分:0)

我们可以使用HTML中的 IFRAME 标记轻松地包含外部文件,而不是使用javascript并使我们的工作更复杂。

**

  

<iframe src="....../path/filename.html" width="" height="">

**

如果需要更多自定义,我们也可以使用CSS控制iframe。