Native Javascript中是否有JSONP.parse()函数?

时间:2017-06-10 13:24:42

标签: javascript jsonp

我正在获得类似于

的JSONP对象的xhr响应

JSONP({Objects})

如果我JSON.parse('JSONP({Objects})')Unexpected token j in JSON at position 0),这会弹出错误,是否有JSONP.parse()函数会自动从JSONP响应中删除*()

为什么我必须这样做?

因为这个JSONP响应需要POST请求,其中就是让其他人难以使用它。

P.S。,回调填充JSONP是动态且不可预测的。

1 个答案:

答案 0 :(得分:1)

理论上,您仍然可以通过以下方式将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);

在这种情况下,您不需要知道回调。