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

标签 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 是动态且不可预测的。

最佳答案

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

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

关于javascript - Native Javascript 中是否有 JSONP.parse() 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44473799/

相关文章:

javascript - 使用 Bootstrap 和 jQuery 不好吗?

javascript - 复制 jQuery 日期选择器

javascript - 没有使用 Winston Node js 库创建日志文件

jquery - 解析来自 Facebook Open Graph 的 JSONP 响应的正确语法

javascript - 从 aurelia http 客户端检索 jsonp 时出错

javascript - 灯箱内的谷歌地图

Javascript IFrame/designmode 和 onkeydown 事件问题

jquery - 如何通过 JSON 或 HTTP 代理访问 Rally REST API JSON 响应?

Angular 5 (Ionic) JSONP 请求

javascript - JavaScript 如何保存到本地文件?