javascript - JSONP 回调不起作用

标签 javascript jsonp

我编写了一个 Foo 构造函数,它有一个用于上传 JSONP 的 load 函数。 script.src 有一个回调,但我收到一个错误:Uncaught ReferenceError: bar is not Defined。我该如何修复它?

function Foo(params) { 
    function bar(response) {
        console.log(response);
    }

    function load() {
        var script = document.createElement('script');
        script.src = Config.apiUrl + '&callback=bar';
        document.getElementsByTagName('head')[0].appendChild(script);
    }

    document.getElementById('button').addEventListener('click', load, false);
}

用法:

var foo = new Foo(params);

页面中可以有很多。

最佳答案

假设您的 JSONP 响应是正确的并且如下所示:

bar(/*some argument*/);

问题:bar 必须是全局可访问的,但目前还不是(它仅在 Foo 内可见)

可能的解决方法:

bar定义为Foo的方法,然后就可以执行它(只要实例foo是全局可访问的) 。在这种情况下,callback 参数必须设置为 foo.bar:


function Foo(params) {

  this.bar=function(response) {
        console.log(response);
    }

  this.load=function(){
        var script = document.createElement('script');
        script.src = Config.apiUrl + '&callback=foo.bar';
        document.getElementsByTagName('head')[0].appendChild(script);
    }

    document.getElementById('button').addEventListener('click', this.load, false);
}

//assuming you create the instance in global scope
var foo = new Foo(params);

关于javascript - JSONP 回调不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32027732/

相关文章:

javascript - 在 jQuery 中的 ajax 调用之外访问 JSONP 数据

javascript - 在单击或悬停在任何地方之前,Angular 5 不会渲染组件

javascript - 如何使用 jquery 移动按钮并通过效果/动画方法查看它?

javascript - 如何从 javaScript 文件中删除脚本初始化

objective-c - 如何在 MacOS 上创建 JSONP?

jquery - 将动态内容加载拆分为多个加载步骤

javascript - 变量已定义并用作方法参数,但从未使用过值,因此获取 ESLint 未使用的变量

javascript - 我的网络 worker 似乎没有正确计算

jquery - Safari/iPhone 和 Opera/Android 中的 JSONP 不起作用

javascript - 重复加载 JSONP 在 Safari、Chrome 中不起作用