我刚刚开始使用JavaScript而且在SO上找不到这样的确切场景,所以我要试试运气。我在外部JS文件中有两个函数,它们在我们的网站上创建视频源:
function getVideos() {
//gets a list of videos
}
//callback function automatically called by getVideos()
function response(jsonData) { //can't change this line
var resp = document.getElementById("resp"); //can change this line and any subsequent lines
//parses data and populates resp
}
然后,从HTML方面,我们只需调用getVideos(),即可创建并填充视频供稿。
但是,我希望能够将我想要的任何元素ID传递给response(),以便我们可以在同一页面上的不同位置创建多个视频源。问题是我无法更改response()的函数声明以包含另一个参数。或者至少我不会相信我可以通过主办我们视频的公司。
我尝试用getVideos()包装response()并从那里传递一个元素ID,但是后来没有调用response(),我能想到的唯一解决方案是使用存储元素ID一个全局变量,我知道这在JavaScript中是一个禁忌。
我的问题是:我只是咬紧牙关并使用全局变量,还是有另一种方式?
有关更多信息,请参阅我们现在的JS代码(使用闭包):http://www.thebearrocks.com/Other/js/videoFeed/createVideoFeed.js 以下是我们从视频主持人那里得到的关于响应()的教程:http://support.brightcove.com/en/video-cloud/docs/making-media-api-calls-dynamic-script-tags
答案 0 :(得分:0)
可能你可以使用参数吗?像这样:
function response(jsonData) { //callback function automatically called by getVideos()
var elemId = arguments.length<2 ? "resp" : arguments[1]+"";
var resp = document.getElementById(elemId);
//parses data and populates resp
}
或者,声明第二个参数具有默认值,如下所示:
function response(jsonData, elemId) {
elemId = elemId || "resp";
var resp = document.getElementById(elemId);
//parses data and populates resp
}
在这种情况下,可以使用一个或两个参数调用函数
答案 1 :(得分:0)
我尝试用getVideos()包装response()并从那里传递一个元素ID,但是后来没有调用response(),我能想到的唯一解决方案是使用存储元素ID一个全局变量,我知道这在JavaScript中是一个禁忌。
我的问题是:我只是咬紧牙关并使用全局变量,还是有另一种方式?
没有。不是id变量需要变为全局变量,但是您的本地response
函数需要从JSONP script回调 - 您将创建closure。
您可以通过调用
“导出”它window.response = mylocalResponseFunction; // you did name that local var "response"