0

我有一个调用外部的页面application.js。此外部application.js文件应调用外部文件join.js(托管在第三方域上)并将其放置在页面上的给定 div 中,即#myGivenId.

更新:简化问题解释。

join.js文件简单地返回一个document.write('something here');字符串。文本something here应放在#myGivenId

我尝试了以下代码,但结果似乎没有呈现在页面上,也没有出现在源代码上。

// jQuery version
$(document).ready(function() {
  return $.getScript('http://localhost:3001/ads/join.js', function(script) {
    return $('#myGivenId').html(script);
  });
});

// CoffeScript version
$(document).ready ->
  $.getScript('http://localhost:3001/ads/join.js', (script) -> $('#myGivenId').html(script))

知道为什么不出现吗?

4

4 回答 4

1

jQuery$.getScript不会以这种方式返回数据,您需要提供回调。

$(document).ready ->
    $.getScript(script_url, (data) -> $('#myGivenId').append(data));

参考:http ://api.jquery.com/jQuery.getScript/

于 2012-11-16T08:00:41.773 回答
0

您缺少的是将div放入 DOM 中。这很容易解决:

document.body.appendChild(placement);

将此行放在函数的末尾。

于 2012-11-16T06:21:22.563 回答
0

我不确定脚本的“结果”是什么意思,但这里有一些可能的解决方案(请原谅我的咖啡脚本,我通常用 JavaScript 编程):

导出函数

假设脚本有一个你想调用的函数,只需使用 jQuery 的 .html():

$('#myChosenId').html(someFunc())

您必须确保提前加载脚本:

$.getScript(pathToScript, () -> $('#myChosenId').html(someFunc()))

这将加载脚本,然后在加载时调用该函数。

评估

如果脚本只是一个表达式(比如5 + 3or callSomeFunc(Math.cos(5), 7, "hello")),那么恐怕唯一的解决方案就是使用eval. 这不是一个好的解决方案,我强烈建议尽可能重构代码以导出函数。

$.get(pathToScript, (script) -> $('#myChosenId').html(eval(script)))

$.get有望$.ajax获得原始脚本(如果这不起作用,您可能需要使用)并将其传递给您的回调。eval将执行脚本并将“结果”分配给 div。

从你的问题来看,这听起来像你想要的。我从不推荐使用eval; 我只是为了完整性而提供它。

如果您经常这样做,那么我建议您查看requirejs。它使您可以清晰地构建代码并以安全的方式导入外部代码。

编辑:

将脚本标签嵌入到元素中:

$('#myChosenId').append($('<script>').attr('src', pathToScript))

我没有对此进行测试,但它应该可以工作。它只是在您的元素下创建一个新的脚本标签。这是一种糟糕的风格,您可能应该找到一种不同的方式从该 3rd 方站点获取数据。有时它是必要的,例如使用路由器固件等。

于 2012-11-16T19:42:21.960 回答
0

这不会像您期望的那样工作。document.write() 将写入原始脚本所在的正文。你不能document.write()对一个元素......你需要修改一个元素innerHTML

如果您无法编辑 join.js,除了更改原始外部脚本的位置之外,您没有好的解决方案。

如果可以修改join.js,直接修改DOM即可。例如。

document.getElementById("myGivenId").innerHTML = "something here";
于 2012-11-17T02:25:03.573 回答