这是一个同学出现的问题,问到了我。

应该是这样的:

但问题是这样的:

我看了所请求的格式和后台要求的也是相同的。而且我也是这种做法,为什么他的就不行呢?

打了几遍 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解析成:

  1. 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?的更多相关文章

  1. 为什么返回的数据前面有callback? ashx/json.ashx?的后面加 callback=? 起什么作用 js url?callback=xxx xxx的介绍 ajax 跨域请求时url参数添加callback=?会实现跨域问题

    为什么返回的数据前面有callback?   这是一个同学出现的问题,问到了我. 应该是这样的: 但问题是这样的: 我看了所请求的格式和后台要求的也是相同的.而且我也是这种做法,为什么他的就不行呢? ...

  2. 如何用 ajax 连接mysql数据库,并且获取从中返回的数据。ajax获取从mysql返回的数据。responseXML分别输出不同数据的方法。

    开讲前,先说下网上,大部分的关于这方面的博文或者其他什么的,就我自己的感觉,第一说得不详细,第二语言不能很好的被初学者了解. 我这篇博文的标题之所以用了三句,是为了方便其他人好查找: 这里介绍的方法有 ...

  3. 使用jQuery解析JSON数据(由ajax发送请求到php文件处理数据返回json数据,然后解析json写入html中呈现)

    在上一篇的Struts2之ajax初析中,我们得到了comments对象的JSON数据,在本篇中,我们将使用jQuery进行数据解析. 我们先以解析上例中的comments对象的JSON数据为例,然后 ...

  4. aspx返回json数据

    JQuery.getJSON 从aspx页面返回JSON数据 . -- ::| 分类: asp.net |举报|字号 订阅 . 发送请求的WebForm1.aspx <%@ Page Langu ...

  5. Php如何返回json数据,前后端分离的基本解决方案

    php返回json,xml,JSONP等格式的数据 返回json数据: header('Content-Type:application/json; charset=utf-8'); $arr = a ...

  6. Php如何返回json数据

    php返回json,xml,JSONP等格式的数据 返回json数据: header('Content-Type:application/json; charset=utf-8'); $arr = a ...

  7. Node.js 返回 JSON 数据

    Node.js 返回 JSON 数据 request.end([data[, encoding]][, callback]) var http = require('http'); const log ...

  8. Web API返回JSON数据

    对Web API新手来说,不要忽略了ApiController 在web API中,方法的返回值如果是实体的话实际上是自动返回JSON数据的例如: 他的返回值就是这样的: { "Conten ...

  9. spring jpa 实体互相引用返回restful数据循环引用报错的问题

    spring jpa 实体互相引用返回restful数据循环引用报错的问题 Java实体里两个对象有关联关系,互相引用,比如,在一对多的关联关系里 Problem对象,引用了标签列表ProblemLa ...

随机推荐

  1. MyEclipse使用Ant打包项目

    本章主要介绍如何使用ant打包发布项目. ant 是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发.在实际软件开发中,有很多地方可以用到ant. 优点 ...

  2. sqlyog下载

    sqlyog下载(附注册码):http://www.onlinedown.net/soft/24926.htm

  3. Linux基础命令---IP路由操作

    ip ip指令可以显示或操作路由.网路设备,设置路由策略和通道. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora.   1.语法     ...

  4. Jmeter压力测试和接口测试

    jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单.因为jmeter是java开发的,所以运行的时候必须先要安 ...

  5. hibernate自动创建表报表不存在

    在hibernate.cfg.xml配置了<property name="hibernate.hbm2ddl.auto">update</property> ...

  6. Spring MVC数据绑定

    1.绑定默认数据类型 当前端请求参数较为简单的时候,后台形参可以直接使用SpringMVC提供的参数类型来绑定数据. HttpServletRequest:通过request对象获取请求信息: Htt ...

  7. Python网络编程,粘包、分包问题的解决

    tcp编程中的粘包.分包问题的解决: 参考:https://blog.csdn.net/yannanxiu/article/details/52096465 服务端: #!/bin/env pytho ...

  8. Centos下10000次循环测试php对Redis和共享内存(shm)读写效率

    redis和memcache还有共享内存都是读取内存的数据,为了测试一下到底效率谁更胜一筹,我在我的Centos虚拟机下做了一次公平的测试. 测试参数 环境:Centos (配置忽略).语言:PHP. ...

  9. Cookie&Session与自定义session

    cookie与session的区别? cookie是保存在浏览器端的键值对 session是保存在服务器端的键值对 session依赖于cookie 摘自: http://bubkoo.com/201 ...

  10. Apache正向代理和反向代理

    一.正向代理 先说一正向代理(Forward Proxy),通常普通用户使用的比较多的,是正向代理.也就是在浏览器的网络连接属性框中,填写上一个代理服务器的ip和端口,即可通过代理服务器中转,去浏览网 ...