我刚开始接触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下面是我们视频的主持人提供的关于response()的教程:http://support.brightcove.com/en/video-cloud/docs/making-media-api-calls-dynamic-script-tags
可以使用参数吗?像这样:
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
}
在这种情况下,函数可以用一个或两个参数来调用
我试过用getVideos()包装response()并从那里传递一个元素ID,但是response()没有被调用,我能想到的唯一解决方案是在全局变量中存储一个元素ID,我知道这在JavaScript中是一个禁忌。
我的问题是:我是咬紧牙关使用全局变量,还是有其他方法?
。不是id变量需要成为全局变量,而是您的本地response
函数需要成为全局变量,以便从JSONP脚本回调-您将创建一个闭包。
你可以通过调用
来"导出"它window.response = mylocalResponseFunction; // you did name that local var "response"