1

我刚开始接触 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

4

2 回答 2

0

我试过用 getVideos() 包装 response() 并从那里传递一个元素 ID,但是没有调用 response(),我能想到的唯一解决方案是将元素 ID 存储在全局变量中,我知道这在 JavaScript 中通常是一个禁忌。

我的问题是:我只是硬着头皮使用全局变量,还是有其他方法?

不,不是 id 变量需要成为全局变量,而是您的本地response函数需要从JSONP 脚本中回调——您将创建一个闭包

您可以通过调用“导出”它

window.response = mylocalResponseFunction; // you did name that local var "response"
于 2013-04-13T15:13:51.550 回答
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
}

在这种情况下,函数可以用一个或两个参数调用

于 2013-04-13T15:11:29.067 回答