为什么返回的数据前面有callback?
这是一个同学出现的问题,问到了我。
应该是这样的:

但问题是这样的:

我看了所请求的格式和后台要求的也是相同的。而且我也是这种做法,为什么他的就不行呢?
打了几遍 JSON.parse 也都是不行……然后也不知道什么情况的耿耿于怀的回去了。
后来在网上搜索,结果都不是想要的。
把 callback 字符串截取掉,这个就不用说咯。这是一种把 json 弄出来的方法。但并不是要问的问题。要问的是:
为什么返回的数据前面会加上 callback ,括号里才是 json 内容。
知乎相似问题:
调用一个api,返回数据格式是:jsonCallback(括号里面才是json),该怎么处理?
百度知道相似问题:
如何在这组返回的数据中获取data对应字符串中jsonCallBack函数并通过其调用?

var jsonback = function (json) {
return json;
};
var jsonObj = eval(obj.data);
//或
var jsonStr = JSON.parse(obj.data.match(/^jsonback\((.*)\);$/)[1]);
csdn相似问题:
关于jsonp返回回来的数据怎么解析
jQuery18307755723037111298_1402151229915([{ "list": [{ "id": 1, "title": "title 1" }, { "id": 2, "title": "title 2" }, { "id": 3, "title": "title 3"}] }])
//jq的代码是这样子的
function loadInfo() {
var url = "http://192.168.100.101:81/A.aspx";
$.ajax({
type: "get",
async: true,
url: url,
dataType: "jsonp",
jsonp: "callback",
//服务端用于接收callback调用的function名的参数
success: function(data) {
alert(data.list);
//这个地方报错是,不是一个函数
},
error: function() {
alert("error");
}
});
}
就没几个人回答 “为什么”,最多都在说 “怎么做”?
好吧。通过自己的研究。发现问题是这样的:
如果把 dataType:"jsonp" 的 dataType 写错,就会出现这种情况。其实也相当于没有传 dataType 这个参数。

但是如果把 "jsonp" 写错,就触发请求失败的函数了 error:function(){} 。
那么问题又来了,像上面 csdn 中的 dataType 好像没写错哟,那返回那样的数据格式 jQuery...([]) 是什么鬼?我想,可能 () 括号前面的 jQuery... 就像 上面其他情况中的 callback、jsonback 一样,相当于一种名字吧。 jsonp 和 json 是与之对应的。但 jQuery... 就不知道要如何与之对应了。所以就解析不了。
扩展阅读:
$.getJSON()方法跨域 去取得服务器的json对象的时候,url的后缀最后带一个"callback=?"的参数作为成功的回调函数;如:
var url = "${BIPJS}/intf/accountsOfRefuseEmail.jsp?act=add&siteId=${LANG.siteId}&accountId=${loginId}&callback=?";
$.getJSON(url, {} , function(data) {
var code = data.code;
if(code == 0){
$('#floatOne').myFadeIn();
}
});
此时返回的data是一个json对象;相应地,服务器返回字符串应该要这种样式:
String callback = T.stringValue(getRequestParams(request,"callback"),"");
JSONObject jo = new JSONObject();
// put key/value in jo
out.print(callback + "(" + jo + ")");
原理:Jquery在解析请求callback=?的时候,会自动生成一个callback=jsonp***的字符串,这个字符串jsonp***在成功回调的时候作为一个方法,被Jquey自动执行,参数是一个json格式的字符串(这里是data)。相应地;服务器返回的字符串要这种形式:jsonp***(JSONObject)。
如:刚上面的url被Jquey解析成:
- Request URL:http://localhost.pcauto.com.cn:12385/intf/accountsOfRefuseEmail.jsp?act=add&siteId=2&accountId=388&callback=jsonp1381976698163&_=1381976708919
服务器返回的字符串形式:
jsonp1381976698163({"code":0,"msg":"增加用户成功"})
Jquery的回调方法jsonp1381976698163(jsonStr)就是要把字符串jsonStr转换成josn对象,这里就是转换成data这个json对象。
为什么返回的数据前面有callback?的更多相关文章
- 为什么返回的数据前面有callback? ashx/json.ashx?的后面加 callback=? 起什么作用 js url?callback=xxx xxx的介绍 ajax 跨域请求时url参数添加callback=?会实现跨域问题
为什么返回的数据前面有callback? 这是一个同学出现的问题,问到了我. 应该是这样的: 但问题是这样的: 我看了所请求的格式和后台要求的也是相同的.而且我也是这种做法,为什么他的就不行呢? ...
- 如何用 ajax 连接mysql数据库,并且获取从中返回的数据。ajax获取从mysql返回的数据。responseXML分别输出不同数据的方法。
开讲前,先说下网上,大部分的关于这方面的博文或者其他什么的,就我自己的感觉,第一说得不详细,第二语言不能很好的被初学者了解. 我这篇博文的标题之所以用了三句,是为了方便其他人好查找: 这里介绍的方法有 ...
- 使用jQuery解析JSON数据(由ajax发送请求到php文件处理数据返回json数据,然后解析json写入html中呈现)
在上一篇的Struts2之ajax初析中,我们得到了comments对象的JSON数据,在本篇中,我们将使用jQuery进行数据解析. 我们先以解析上例中的comments对象的JSON数据为例,然后 ...
- aspx返回json数据
JQuery.getJSON 从aspx页面返回JSON数据 . -- ::| 分类: asp.net |举报|字号 订阅 . 发送请求的WebForm1.aspx <%@ Page Langu ...
- Php如何返回json数据,前后端分离的基本解决方案
php返回json,xml,JSONP等格式的数据 返回json数据: header('Content-Type:application/json; charset=utf-8'); $arr = a ...
- Php如何返回json数据
php返回json,xml,JSONP等格式的数据 返回json数据: header('Content-Type:application/json; charset=utf-8'); $arr = a ...
- Node.js 返回 JSON 数据
Node.js 返回 JSON 数据 request.end([data[, encoding]][, callback]) var http = require('http'); const log ...
- Web API返回JSON数据
对Web API新手来说,不要忽略了ApiController 在web API中,方法的返回值如果是实体的话实际上是自动返回JSON数据的例如: 他的返回值就是这样的: { "Conten ...
- spring jpa 实体互相引用返回restful数据循环引用报错的问题
spring jpa 实体互相引用返回restful数据循环引用报错的问题 Java实体里两个对象有关联关系,互相引用,比如,在一对多的关联关系里 Problem对象,引用了标签列表ProblemLa ...
随机推荐
- python pprint
使用 pprint 模块 pprint 模块( pretty printer ) 用于打印 Python 数据结构. 当你在命令行下打印特定数据结构时你会发现它很有用(输出格式比较整齐, 便于阅读). ...
- Axis2基础
本章主要介绍如何使用axis2开发webservice接口. 以下以一个实例程序讲解如何编写一个axis2的服务端和客户端. axis2版本:axis2-1.5.4-bin.zip 目录结构: 关键代 ...
- Linux服务器安装部署redis
参考地址: redis教程:http://www.runoob.com/redis/redis-tutorial.html redis百度百科:https://baike.baidu.com/item ...
- activemq消息队列的使用及应用docker部署常见问题及注意事项
activemq消息队列的使用及应用docker部署常见问题及注意事项 docker用https://hub.docker.com/r/rmohr/activemq/配置在/data/docker/a ...
- [转载]表单校验之datatype
凡要验证格式的元素均需绑定datatype属性,datatype可选值内置有10类,用来指定不同的验证格式. 如果还不能满足您的验证需求,可以传入自定义datatype,自定义datatype是一个非 ...
- <转>jmeter(十六)配置元件之计数器
本博客转载自:http://www.cnblogs.com/imyalost/category/846346.html 个人感觉不错,对jmeter讲解非常详细,担心以后找不到了,所以转发出来,留着慢 ...
- java使用ssh远程操作linux 提交spark jar
maven依赖 <!--Java ssh-2 --><dependency> <groupId>ch.ethz.ganymed</groupId> &l ...
- Java用Jackson遍历json所有节点
<!-- jackson begin --> <dependency> <groupId>com.fasterxml.jackson.core</groupI ...
- Linux学习笔记之CentOS7配置***SS
0x00 概述 最近安装K8S,镜像在国内不可达,只能通过科学方法获取. 0x01 安装配置Shadowsocks客户端 1.1 安装Sha.dows.ocks客户端 安装epel扩展源 采用Pyth ...
- 用到临时表空间的几种SQL
用到临时表空间的几种SQL CREATE INDEX SELECT ... ORDER BY SELECT DISTINCT ... SELECT ... GROUP BY SELECT ... UN ...