将 json 文件名作为参数传递给外部 js 文件



>我有这个函数,我正在调用它来检索一些JSON数据并使用它来填充页面的各个部分。js 是一个单独的 JS 文件。

$(document).ready(function(){
$.getJSON('data.json', function(data) {
    var pg_title=data.metadata.title;
    $(document).ready(function (){
        document.title = pg_title;
        document.getElementById("page_title").innerHTML=pg_title;
    });
    for (var i in data.sections) {
        var section_title=data.sections[i].title;
        var section_content=data.sections[i].content;
        var section_id=data.sections[i].title;
            var lastChar = section_id.indexOf(' ');
        section_id = section_id.slice(0,lastChar).toLowerCase();
        document.getElementById("sections").innerHTML+="<h2 id='" + section_id + "'>" + section_title + "</h2>" + "<p>" + section_content + "</p>";
    }
});
});

我像这样从我的 HTML 中调用它:

<script src="/design-library/js/getJSON.js" type="text/javascript"></script>

如何编辑设置,以便我可以 (a) 使用配对文件名(例如 cabinet.html & cabinet.json)或 (b) 将 json 文件名作为 HTML 文件中的参数传递给函数?

您可以将代码包装在函数中,如下所示:

function SomeFunctionName(jsonName)
{
    $.getJSON(jsonName, function(data) {
        var pg_title=data.metadata.title;
        $(document).ready(function (){
            document.title = pg_title;
            document.getElementById("page_title").innerHTML=pg_title;
        });
        for (var i in data.sections) {
            var section_title=data.sections[i].title;
            var section_content=data.sections[i].content;
            var section_id=data.sections[i].title;
                var lastChar = section_id.indexOf(' ');
            section_id = section_id.slice(0,lastChar).toLowerCase();
            document.getElementById("sections").innerHTML+="<h2 id='" + section_id + "'>" + section_title + "</h2>" + "<p>" + section_content + "</p>";
        }
    });
}

并从您的 HTML 中调用它,如下所示:

  <script type="text/javascript"> 
 $(document).ready(function(){
    SomeFunctionName('data.json');
    });
</script>

假设您的网页网址http://path/cabinet.html

在脚本中,可以使用正则表达式获取页面名称:

var pageName = //(.+).html/.exec(window.location.href)[1];

(将返回页面名称="文件柜")

然后,您可以将页面名称传递给函数:

$.getJSON(pageName+'.json', function(data) {...

根据克里斯托夫的反馈,最终得到了这个。谢谢。现在 - 我无法摆脱第二个document.ready(.getJSON),因为如果我这样做,函数将无法执行。

$(document).ready(function () {
"use strict";
var pageName;
if (!pageName) {
    pageName = "index";
} else {
    pageName = //(.+).html/.exec(window.location.href);
}
$.getJSON(pageName + '.json', function (data) {
    var pg_title;
    pg_title = data.metadata.title;
    $(document).ready(function() {
        document.title = pg_title;
        document.getElementById("page_title").innerHTML = pg_title;
    });
    for (i in data.sections) {
        var section_title, section_content, section_id, lastChar, i;
        section_title = data.sections[i].title;
        section_content = data.sections[i].content;
        section_id = data.sections[i].title;
        lastChar = section_id.indexOf(' ');
        section_id = section_id.slice(0, lastChar).toLowerCase();
        document.getElementById("sections").innerHTML += "<h2 id='" + section_id + "'>" + section_title + "</h2>" + "<p>" + section_content + "</p>";
    }
});
});

最新更新