JSONP 脚本回调不起作用



我想在使用纯javascript加载脚本后执行回调。我能够正确加载脚本,但我的回调没有触发。我听说使用 JSONP 我可以做这种事情,但是,我不能完全让它工作。这是我的代码:

function foo(){
   alert('got the data');
}
var el = document.createElement("script");
el.setAttribute("src", "//ajax.googleapis.com/ajax/libs/webfont/1.5.0/webfont.js?callback=foo");
document.body.appendChild(el);

JSONP与此无关。您尝试加载的 URL 已经返回 JavaScript,因此您需要做的是将加载事件处理程序绑定到元素:

var el = document.createElement("script");
el.setAttribute("src", "//ajax.googleapis.com/ajax/libs/webfont/1.5.0/webfont.js");
el.onload = function() {
    // script loaded
};
document.body.appendChild(el);

参见 如何在另一个 JavaScript 文件中包含 JavaScript 文件?


当您想要从外部域加载数据时,JSONP 被用作 Ajax 的替代方案,但它是服务器必须支持的东西。如果服务器支持它,而不是返回(例如)简单的 JSON:

{"foo": 42}

它会将其包装在callbackName(...);中,以使用单个函数调用创建JS脚本:

callbackName({"foo": 42});

实际函数名称取自 GET 参数 callback

最新更新