Native Javascript中有JSONP.parse()函数吗?
Is there a JSONP.parse() function in Native Javascript?
我收到类似于
的 JSONP 对象的 xhr 响应
JSONP({Objects})
如果我执行 JSON.parse('JSONP({Objects})')
(Unexpected token j in JSON at position 0
),这会弹出一个错误,是否有一个 JSONP.parse()
函数会自动从 JSONP 响应中删除 *()
?
为什么我必须这样做?
因为这个 JSONP 响应需要 POST 请求,这使得其他人很难使用它。
P.S., 回调填充 JSONP
是动态且不可预测的。
理论上您仍然可以通过以下方式将 jsonp 附加到文档:
var jsonp = {};
function getList(callback){
var xhrlist = new XMLHttpRequest();
xhrlist.addEventListener('load',function(){
if (xhrlist.status == 200) {
callback(null, xhrlist.responseText);
} else {
console.log(xhrlist.responseText);
callback('error');
}
});
xhrlist.open('POST', 'http://example.com/');
xhrlist.send('request=list');
}
getList((err, data)=>{
if (err) {
alert(err);
} else {
alert('success!');
var script = document.createElement('script');
script.innerHTML = data;
document.getElementsByTagName('head')[0].appendChild(script);
}
});
function JSONP(response) {
jsonp = response;
}
现在这里有一个缺陷,function JSONP(response)
必须与您的 JSONP 回调同名。所以这只有在回调保持不变的情况下才有效,而且你已经知道它是什么了。
当然,如果你必须剥离 JSONP,你可以试试这个:
data = data.substring(data.indexOf('(') + 1);
data = data.substring(0, data.length - 1);
在这种情况下,您不需要知道回调。
我收到类似于
的 JSONP 对象的 xhr 响应JSONP({Objects})
如果我执行 JSON.parse('JSONP({Objects})')
(Unexpected token j in JSON at position 0
),这会弹出一个错误,是否有一个 JSONP.parse()
函数会自动从 JSONP 响应中删除 *()
?
为什么我必须这样做?
因为这个 JSONP 响应需要 POST 请求,这使得其他人很难使用它。
P.S., 回调填充 JSONP
是动态且不可预测的。
理论上您仍然可以通过以下方式将 jsonp 附加到文档:
var jsonp = {};
function getList(callback){
var xhrlist = new XMLHttpRequest();
xhrlist.addEventListener('load',function(){
if (xhrlist.status == 200) {
callback(null, xhrlist.responseText);
} else {
console.log(xhrlist.responseText);
callback('error');
}
});
xhrlist.open('POST', 'http://example.com/');
xhrlist.send('request=list');
}
getList((err, data)=>{
if (err) {
alert(err);
} else {
alert('success!');
var script = document.createElement('script');
script.innerHTML = data;
document.getElementsByTagName('head')[0].appendChild(script);
}
});
function JSONP(response) {
jsonp = response;
}
现在这里有一个缺陷,function JSONP(response)
必须与您的 JSONP 回调同名。所以这只有在回调保持不变的情况下才有效,而且你已经知道它是什么了。
当然,如果你必须剥离 JSONP,你可以试试这个:
data = data.substring(data.indexOf('(') + 1);
data = data.substring(0, data.length - 1);
在这种情况下,您不需要知道回调。