在已编译的javascript中触发回调

时间:2012-02-24 20:18:38

标签: javascript google-closure-compiler google-closure

我有一个具有挑战性的问题。我正在使用Blogger JSON API来获取JSON数据并在页面上显示。通常它非常简单:

    <script src="http://blog-name.blogspot.com/feeds/posts/default?alt=json-in-script&amp;callback=renderPost&amp;max-results=4"></script>

您将此脚本嵌入到请求数据并将数据对象传递给javascript回调的页面上(在这种情况下,回调称为renderPost)。

问题是我使用Closure编译器来编译我的其余JS。因此,renderPost被混淆了。

你会如何使用javascript模仿这种行为?你可以使用AJAX请求来获取JSON对象吗?

部分问题是我真的不知道Blogger在这里做了什么,所以对此的解释也会有所帮助。

2 个答案:

答案 0 :(得分:3)

Closure compiler中,您可以按如下方式导出变量:

window['varname'] = varname;

例如:

// ==ClosureCompiler==
// @compilation_level ADVANCED_OPTIMIZATIONS
// @output_file_name default.js
// ==/ClosureCompiler==
window['renderPost'] = renderPost;
function renderPost(name) {
    return prompt('', '');
}

汇编为:

window.renderPost=a;function a(){return prompt("","")}a();

而不是(省略window['renderPost'] = renderPost时):

prompt("","");

答案 1 :(得分:1)

它正在执行jsonp,这是目前从其他域获取json的唯一方法。不,您不能使用常规的ajax请求进行跨域通信。请参阅Rob W关于如何解决问题的答案。