javascript - 这是有效的 JSONP 响应吗?

标签 javascript jquery ajax jsonp

如果这是一个非常基本的问题,我深表歉意。我第一次使用 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 的攻击。既然 Adob​​e 已经修复了该安全漏洞,这并不是一个真正的问题,但它确实解释了为什么典型的 JSONP 响应可能是不受欢迎的)

鉴于我在第一段中提到的假设,您将在倒数第三行中得到 something(data); 而不是 ;,这将成功作为 JSONP 执行.

如果我的假设是错误的,那么该代码根本不会执行任何操作,这使得它完全毫无意义。

(这强调了一个事实,JSONP 是 JavaScript,您请求它的服务可以在响应中运行他们喜欢的任何 JS,这会让您面临 XSS 问题。幸运的是,我们现在有了 CORS,它解决了所有问题JSONP 以更干净、更灵活的方式解决了问题)。

关于javascript - 这是有效的 JSONP 响应吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37993190/

相关文章:

javascript - vue-strap `select` 组件

jquery - 获取所有类型为 datetime 的元素并向它们添加日期选择器?

ajax - 如何使用 dojo.io.iframe.send 取消文件上传?

javascript - 点击按钮并用文本填充后在两个文本区域中添加新行

jquery - 克隆 div 中输入 block 的 AJAX 更新

javascript - 在 JavaScript 中使用循环设置超时

javascript - 有没有办法找到使用绑定(bind)到事件的属性的数组元素,同时使用 ngfor 作为默认值?

javascript - 检查是否有任何文本框包含文本

c# - 在 jquery 对话框中显示 azure storage 存储的文档,并且不应下载

javascript - 在选择标签而不是文本中显示值