为什么这个JSONP网址写得像这样?

时间:2017-05-15 07:40:36

标签: cors jsonp

现在我试图从freecodecamp做一个随机引用生成器挑战。 但是,从网站上获取引用我遇到了很多麻烦 http://api.forismatic.com由于CORS ...然后我偶然发现了某人的解决方案,但我不明白为什么他在网址的末尾添加了查询jsonp=?

他创造了:

// Random Quote Generator
var url = "http://api.forismatic.com/api/1.0/?method=getQuote&key=457653&format=jsonp&lang=en&jsonp=?";

除最后jsonp=?之外,我都会关注所有内容...... 我知道必须有一个回调,我试图用callback=?替换它 但后来出现了错误:

"Refuse to execute script from (data resource) because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled."

1 个答案:

答案 0 :(得分:0)

根据http://forismatic.com/en/api/的文档:

  

jsonp =< string> - 回调函数名称,仅用于jsonp格式

所以他们只有一个jsonp param,其他API用callback完全相同。

所以给定method=getQuote&key=457653&format=jsonp&lang=en&jsonp=?,文字“?”就是API将作为回调函数名称返回的内容:

$ curl "http://api.forismatic.com/api/1.0/?method=getQuote&key=457653&format=jsonp&lang=en&jsonp=?"

?({"quoteText":"I have done my best: that is about all the philosophy of living one needs.","quoteAuthor":"Lin-yutang","senderName":"","senderLink":"","quoteLink":"http://forismatic.com/en/475d78775d/"})

换句话说,参数名称“callback”并没有什么神奇之处 - 没有标准要求必须使用参数名称,因此任何API提供商都可以选择使用他们想要的任何名称 - 作为forismatic。 com选择了他们的API。