javascript - 如何防止 AJAX 调用中的 JSONP 解析?

标签 javascript jquery ajax jsonp

我有一些代码可以使用 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?登录

我知道这可能是因为响应严格来说不是 jsonp 格式。如何在此处捕获重定向变量而不出现 jsonp 错误?

最佳答案

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

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

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

关于javascript - 如何防止 AJAX 调用中的 JSONP 解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23092412/

相关文章:

c# - 母版页中的更新面板和子页中的 asp 文件上传

php 聊天占用大量内存! Jquery、PHP 和 MySQL

javascript - 是什么 !! JavaScript 中的(不是 not)运算符?

javascript - 用于传递空格和单引号的正则表达式

javascript - jQuery 验证 : removing nearby error message onClick

jquery - blockUI异常 'parentNode'未定义

jquery - CSS 菜单和 JQuery

javascript - 如何将外部 JSON 文件传递​​到可以在任何地方访问的 javascript 变量

javascript - Backbone.Model => 未捕获的类型错误 : Object [Object object] has not method 'apply'

javascript - 从获取返回值更新 vuejs 警报组件