我有以下响应:
someFunc({"attr":"val"});
如何从中检索JSON?我可以从字符串中删除函数名,只获取JSON,但我认为这不是JSONP的最佳解决方案。我可以使用eval
来调用someFunc
函数,但是eval
是坏的。我该怎么做?
通常这些类型的输入来自javascript应用程序将调用的远程端点。执行此远程调用的方法通常是声明一个具有预期名称的函数,然后将script
标记动态注入DOM,将其src
属性指向远程资源。当加载资源时,它将调用您的函数,并将其作为参数传递给所需的对象。
让我们举一个例子。假设您有一个远程端点,它会向您返回问题中显示的数据。
首先定义一个函数:
window.someFunc = function(result) {
// result will represent the {"attr":"val"} object
alert(JSON.stringify(result));
};
然后只需创建一个script
元素,该元素将被附加到DOM中,并从远程端点启动JSONP检索:
var s = document.createElement('script');
s.setAttribute('src', 'http://example.com/some_endpoint');
document.body.appendChild(s);
脚本成功加载远程资源后,它将调用您定义的someFunc
并将结果对象传递给它。
备注:大多数启用JSONP的端点都允许您通过一些查询字符串参数指定回调的名称:http://example.com/some_endpoint?callback=someFunc
,这样您就可以提前知道如何命名函数了。