Javascript 使用eval和jsonp响应的替代方法

Javascript 使用eval和jsonp响应的替代方法,javascript,json,jsonp,Javascript,Json,Jsonp,我有以下回应: someFunc({"attr":"val"}); 如何从中检索JSON?我可以从字符串中删除函数名,只获取JSON,但我认为这不是JSONP的最佳解决方案。我可以使用eval调用someFunc函数,但同样,eval不好。我应该如何做到这一点?通常,这些输入来自javascript应用程序将调用的远程端点。这种远程调用通常是通过声明一个具有预期名称的函数,然后将一个脚本标记动态注入DOM,将其src属性指向远程资源。加载资源时,它将调用您的函数,并将其作为所需对象的参数传递

我有以下回应:

someFunc({"attr":"val"});

如何从中检索JSON?我可以从字符串中删除函数名,只获取JSON,但我认为这不是JSONP的最佳解决方案。我可以使用
eval
调用
someFunc
函数,但同样,
eval
不好。我应该如何做到这一点?

通常,这些输入来自javascript应用程序将调用的远程端点。这种远程调用通常是通过声明一个具有预期名称的函数,然后将一个
脚本
标记动态注入DOM,将其
src
属性指向远程资源。加载资源时,它将调用您的函数,并将其作为所需对象的参数传递

让我们举个例子。假设您有一个远程端点,该端点返回问题中显示的数据

首先定义一个函数:

window.someFunc = function(result) {
    // result will represent the {"attr":"val"} object
    alert(JSON.stringify(result));
};
然后只需创建一个
脚本
元素,该元素将附加到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
以便您提前知道如何命名函数。

通常,这些输入来自javascript应用程序所使用的远程端点我会打电话的。这种远程调用通常是通过声明一个具有预期名称的函数,然后将一个
脚本
标记动态注入DOM,将其
src
属性指向远程资源。加载资源时,它将调用您的函数,并将其作为所需对象的参数传递

让我们举个例子。假设您有一个远程端点,该端点返回问题中显示的数据

首先定义一个函数:

window.someFunc = function(result) {
    // result will represent the {"attr":"val"} object
    alert(JSON.stringify(result));
};
然后只需创建一个
脚本
元素,该元素将附加到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
以便您提前知道如何命名函数。

安全(r)解决方案是一个带有允许函数的case语句显示您是否获得此值?你在呼叫远程资源吗?通常,您会在代码中定义
someFunc
函数,然后将远程资源作为
script
标记的
src
属性馈送到DOM中。然后,将自动调用您定义的
someFunc
,并将所需对象作为参数传入。安全(r)解决方案是一个带有允许函数show的case语句。是否获取此值?你在呼叫远程资源吗?通常,您会在代码中定义
someFunc
函数,然后将远程资源作为
script
标记的
src
属性馈送到DOM中。然后,将自动调用您定义的
someFunc
,并将所需对象作为参数传入。