如果这是一个非常基本的问题,我深表歉意。我第一次使用 JSONP 并尝试编写一些 JQuery 来获取跨域数据并从中提取一些元素。
如果我输入服务的 URL,我会收到以下响应
(function(){
var data = {
status: 1,
content: {"name":"charliebrown", "resultCode":"0", "messageID":"1234"}
};
try{
;
}catch(ex){}
})();
当我在尝试使用 jQuery.parseJSON() 之类的内容之前检查格式良好的 JSON 响应时,验证检查失败。
我应该期待这样的响应吗?
my_jsonp_callback (
{"name":"charliebrown", "resultCode":"0", "messageID":"1234"}
)
我只对原始响应的“内容”部分感兴趣。我是否正确假设我可能没有从服务器收到有效的 JSONP 响应?
最佳答案
假设 try/catch block 为空,因为您没有在 URL 中放入 callback=something
,那么……“也许”。
JSONP 不是一个定义明确的格式。您问题中的第二个代码块显示了典型 JSONP 响应,但 JSONP 真正需要做的就是调用函数并向其传递一些数据。
(回到典型的响应,它本身可能容易受到 Rosetta Flash 的攻击。既然 Adobe 已经修复了该安全漏洞,这并不是一个真正的问题,但它确实解释了为什么典型的 JSONP 响应可能是不受欢迎的)
鉴于我在第一段中提到的假设,您将在倒数第三行中得到 something(data);
而不是 ;
,这将成功作为 JSONP 执行.
如果我的假设是错误的,那么该代码根本不会执行任何操作,这使得它完全毫无意义。
(这强调了一个事实,JSONP 是 JavaScript,您请求它的服务可以在响应中运行他们喜欢的任何 JS,这会让您面临 XSS 问题。幸运的是,我们现在有了 CORS,它解决了所有问题JSONP 以更干净、更灵活的方式解决了问题)。
关于javascript - 这是有效的 JSONP 响应吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37993190/