这个JSONPurl为什么要这样写呢?

Why is this JSONP url written like this?

现在我正在尝试从 freecodecamp 进行随机报价生成器挑战。 但是,我在从网站上获取报价时遇到了很多麻烦 http://api.forismatic.com 由于 CORS ... 然后我偶然发现了某人的解决方案,但我不明白为什么他在 url.

的末尾包含了一个查询 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."

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

jsonp=<string> — callback function name, used for jsonp format only

所以他们只有一个 jsonp 参数,其他 API 使用 callback.

完全相同的东西

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

$ 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 选择的那样。