
Jquery ajax在请求不同域名(外网)的URL时,由于浏览器安全限制(同源策略)是不允许请求的,将会发生错误。如果想要在这样的场景下获取返回的数据,可以参考下面的方法:
1、搭建服务器做代理捉取跨域请求返回的数据,本地应用页面的ajax请求建立的代理服务器就能间接的实现这样的需求。但是此种做法较为复杂,不建议使用;
2、使用jsonp跨域访问,这种方法是较为普遍的解决方案,其实现原理是:HTML的<script>标签是可以突破同源策略从其他来源获取数据,所以可以通过<script>标签引入jsonp文件,然后通过一系列JS *** 作获取数据。
具体实现步骤如下:
利用本地页面js创建一个<script>元素,地址指向第三方的API网址,形如:
<script src=";提供一个回调函数来接收数据(函数名可约定,或通过地址参数传递), 第三方产生的响应为json数据的包装(故称之为jsonp,即json padding),形如:
callback({"name":"hax","gender":"Male"})这样浏览器会调用callback函数,并传递解析后json对象作为参数。本地脚本可在callback函数里处理所传入的数据。
示例代码:
<script>var url = ";
使用jsonp需要后端代码配合, 后台返回的json外面需要由回调函数包裹。
json文件是一种轻量级的数据交互格式。一般在jquery中使用getJSON()方法读取。
$getJSON(url,[data],[callback])
url:加载的页面地址
data: 可选项,发送到服务器的数据,格式是key/value
callback:可选项,加载成功后执行的回调函数
1首先建一个JSON格式的文件userinfojson 保存用户信息。如下:
1234567891011121314151617
[{"name":"张国立","sex":"男","email":"zhangguoli@123com"},{"name":"张铁林","sex":"男","email":"zhangtieli@123com"},{"name":"邓婕","sex":"女","email":"zhenjie@123com"}]
2其次建一个页面用于获取JSON文件里的用户信息数据,并显示
123456789101112131415161718192021222324252627282930313233343536373839404142
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 10 Transitional//EN" ">
var string_a = 'distance=20&limit_start=0&limit_num=3&lng=11407&lat=2253';
var string = string_asplit('&');
var res = {};
for(var i = 0;i<stringlength;i++){
var str = string[i]split('=');
res[str[0]]=str[1];
}
documentwrite(JSONstringify(res));
结果
后台解析前端传来的json数据格式听简单的#
比如客户端传来的参数格式url
从最外边可以知道我们传给的最外面的参数是data所以后台接收到的也只是data的参数
所以我们现在需要做的就是解析传给后台的json数据格式
代码如下:
// 谷歌产生json对象的工具
Gson json = new Gson();
// 产生 P{} 里面参数接收对象
Param p = new Param(); Param对象里的属性是pageNum,type,sessionKey(注意的是该对象指的是p,对象里面的属性也必须和客户端中json数据格式中的字段名称一致)
//需要将客户端传来的json数据转换成什么对象
p = jsonfromJson(data, Paramclass); data为最外层的json数据对象
获取对象中的参数的值
pgetType();就能获取到客户端传来的参数的值了###
很简单的 API一看就明白了###
最外层当然为
gsonjar包
public class Base {
private String m;
private String c;
public String getM() {
return m;
}
public void setM(String m) {
thism = m;
}
public String getC() {
return c;
}
public void setC(String c) {
thisc = c;
}
}
对象中的对象
package comismartinfoilifeapientitiesparameter;
public class Param extends Base{
private ParamValue p;
public ParamValue getP() {
return p;
}
public void setP(ParamValue p) {
thisp = p;
}
}
package comismartinfoilifeapientitiesparameter;
public class ParamValue {
private int pageNum;
private int type;
private int groupInfoId;
private int groupInfoReplyId;
private String sessionKey;
private int groupTitle;
private String groupContent;
private String phone;
private int buttonType;
private int replayId;
private int disclosure;
public int getPageNum() {
return pageNum;
}
public void setPageNum(int pageNum) {
thispageNum = pageNum;
}
public String getSessionKey() {
return sessionKey;
}
public void setSessionKey(String sessionKey) {
thissessionKey = sessionKey;
}
public int getType() {
return type;
}
public void setType(int type) {
thistype = type;
}
public int getGroupInfoId() {
return groupInfoId;
}
public void setGroupInfoId(int groupInfoId) {
thisgroupInfoId = groupInfoId;
}
public int getGroupInfoReplyId() {
return groupInfoReplyId;
}
public void setGroupInfoReplyId(int groupInfoReplyId) {
thisgroupInfoReplyId = groupInfoReplyId;
}
public int getGroupTitle() {
return groupTitle;
}
public void setGroupTitle(int groupTitle) {
thisgroupTitle = groupTitle;
}
public String getGroupContent() {
return groupContent;
}
public void setGroupContent(String groupContent) {
thisgroupContent = groupContent;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
thisphone = phone;
}
public int getButtonType() {
return buttonType;
}
public void setButtonType(int buttonType) {
thisbuttonType = buttonType;
}
public int getReplayId() {
return replayId;
}
public void setReplayId(int replayId) {
thisreplayId = replayId;
}
public int getDisclosure() {
return disclosure;
}
public void setDisclosure(int disclosure) {
thisdisclosure = disclosure;
}
}
以上就是关于JQuery ajax json怎样获取外网url返回的数据全部的内容,包括:JQuery ajax json怎样获取外网url返回的数据、如何读取Json文件的数据、用javascript把url传值格式转化为JSON格式等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)