【问题标题】:how to prevent JSONP parse from the AJAX call?如何防止来自 AJAX 调用的 JSONP 解析?
【发布时间】:2014-05-30 07:41:49
【问题描述】:

我有一些代码可以用 jquery 1.9 调用其他几个站点(跨域),这迫使我在 ajax 调用中使用 jsonp 而不是 json:

.ajax({ 
type : "POST",
url : "http://web.company.com/login/?login_only=1&callback=photos",
data : "user="+ username,
crossDomain : true,  
dataType : "jsonp",

但是,它总是返回一个解析错误:

语法错误:缺失;声明之前 {"status":1,"redirect":"/cpsess9236070602/web/x3/index.html?login

我知道这可能是因为响应不是严格的 jsonp 格式。如何在没有 jsonp 错误的情况下捕获重定向变量?

【问题讨论】:

  • 要将 json 更改为 jsonp,您需要将 json 字符串包装在照片中,因此您将返回 "photos($jsonString)"
  • 您无法使用客户端 javascript 解决此问题。它必须由web.company.com 修复,或者您必须在您的服务器上使用代理脚本。
  • @KevinB - 当然可以,如果其他站点在 Node 上运行;) ...
  • 哈哈,我猜你是对的!让它更精确......
  • @KevinB - 无论如何,这不能通过调用 web 服务的代码来解决,它只能由 web 服务修复,因为它们必须返回有效的 JSONP。跨度>

标签: javascript jquery ajax jsonp


【解决方案1】:

如果响应不是 JSONP,那么除非您控制服务器端,否则您无能为力。

JSONP 响应实际上不会发生解析。 JSONP 响应只是一个以 JavaScript 对象或数组作为参数的函数调用。 jQuery 会将响应包含为 <script> 标记,执行 JavaScript,因此如果没有函数调用(例如使用常规 JSON 响应),则您无法访问内容。

一种可能的解决方案是通过与您的 JavaScript 位于同一域的服务器端脚本代理请求,使用服务器到服务器调用第三方,不受跨域限制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 2023-03-22
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多