GVKun编程网logo

Ajax和WEB服务数据格式:JSON JSONP(ajax webservice)

23

关于Ajax和WEB服务数据格式:JSONJSONP和ajaxwebservice的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于ajaxjsonp其本质用原生js来处理跨域的数据(jso

关于Ajax和WEB服务数据格式:JSON JSONPajax webservice的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于ajax jsonp其本质 用原生js来处理跨域的数据(jsonp)、ajax JSONP请求 处理回调函数的注意:jsonpCallback是区分大小写、Ajax(三) — json 数据格式、Ajax_数据格式_JSON等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

Ajax和WEB服务数据格式:JSON JSONP(ajax webservice)

Ajax和WEB服务数据格式:JSON JSONP(ajax webservice)

总结

以上是小编为你收集整理的Ajax和WEB服务数据格式:JSON JSONP全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

ajax jsonp其本质 用原生js来处理跨域的数据(jsonp)

ajax jsonp其本质 用原生js来处理跨域的数据(jsonp)

说明总结:

1.ajax和jsonp其实本质上是不同的东西。ajax的核心是通过XmlHttpRequest获取非本页内容,而jsonp的核心则是动态添加<script>标签来调用服务器提供的js脚本

2.但是ajax和jsonp在数据传输的过程中都是可以用json格式的数据。

3.其实ajax与jsonp的区别不在于是否跨域,ajax通过服务端代理一样可以实现跨域,jsonp本身也不排斥同域的数据的获取。

4.ajax和jsonp这两种技术在调用方式上“看起来”很像,目的也一样,都是请求一个url,然后把服务器返回的数据进行处理,因此jquery和ext等框架都把jsonp作为ajax的一种形式进行了封装;

服务器端代码:

//获取客户端的信息
    if (isset($_GET[''code''])) {
        if ($_GET[''code''] == "CA1998") {
            $flightId = $_GET[''code''];
            $price = 1000;
        }
        else if ($_GET[''code''] == "CA1997") {
            $flightId = $_GET[''code''];
            $price = 2000;
        }
        else{
            $flightId = 0;
            $price = 0;
        }
        $flightHandler = array(''flightId''=>$flightId,''price''=>$price); 
        $flightHandler = json_encode($flightHandler);
        $flightHandler = "flightHandler(".$flightHandler .");";// 将数据进行了包装,包装成了一个调用的函数,这一步很重要。
        print_r($flightHandler);
    }

获取到的服务器数据:

flightHandler({
    "flightId": "CA1998",
    "price": 20004
});
//其实就在服务器端把json数据包装成了一个js的函数,将一个对象作为参数放在函数里面。所以跟ajax用XMLHttpRequest接收数据是不一样的。

传统ajax获取到的json数据:

{
    "flightId": "CA1998",
    "price": 2000
}

客户端代码:


<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title>XHR</title>
    <link rel="stylesheet" href="../templates/css/verify.css">
</head>
<body>
    <label for="flightId">输入:CA1998 或者 CA1997 </label> <input type="text" id="flightId" name="flightId"> <input type="button" value="原生js获取jsonp数据(php包装数据)" onclick="flightHandler0()"><input type="button" value="原生js获取jsonp数据(js包装数据)" onclick="flightHandler1()">
 <script type="text/javascript">

    // 得到航班信息查询结果后的回调函数
    function flightHandler(data){
        if (data.price != 0) {
             alert(''你查询的航班结果是:票价 '' + data.price + '' 元,'' + ''航班 '' + data.flightId );
        } else{
            alert("EORROR");
        };
       
    };

    function flightHandler0(){
        var flightId = document.getElementById(''flightId'').value;
         //供jsonp服务的url地址(不管是什么类型的地址,最终生成的返回值都是一段javascript代码)
         //其实参数都是前端和后台程序员规定的,前端传过去,后端判断获取即可。
        var url = "flightResult.php?code=" + flightId +"&callback=flightHandler";
        // 创建script标签,设置其属性
        var script = document.createElement(''script'');
        script.setAttribute(''src'', url);
        // 把script标签加入head,此时调用开始
        document.getElementsByTagName(''head'')[0].appendChild(script); 
    };

    </script>
</body>
</html>


设想:

上面的方法是在服务器端把json数据包装在回调函数里面,那能不能在客户端来做这个事情呢?但是试了一下感觉行不通。

在服务器端把

$flightHandler = "flightHandler(".$flightHandler .");";

去掉。

留言中有用jquery写的jsonp的例子。

最后附上用原生js和jquery分别处理jsonp的例子:

js:http://snowinmay.net/ajax/xhr-js-jsonp.html

jsonp:http://snowinmay.net/ajax/xhr-jquery-jsonp.html

所以返回数据应该是json数据,但是在客户端好像没有很好的办法来包装这个数据。如果有的话以后再补充。

ajax JSONP请求 处理回调函数的注意:jsonpCallback是区分大小写

ajax JSONP请求 处理回调函数的注意:jsonpCallback是区分大小写

使用ajax进行 JSONP跨域请求,因为被请求的对方的回调函数名称是无法修改。而这边页面中会出现多个不同JSONP请求,但他们的回调函数名称都是同一个,_Callback。想到设置AJAX 的JSONP参数。但是发现根本不起作用。最后偶然发现 jsonpcallback是区分大小写的。必须是jsonpCallback 而不是jsonpcallback


    $.ajax({
        url: 'http://www.zbPHP.com/j.PHP?act=json&tm=',dataType: 'JSONP',jsonpCallback: '_GroupMember_Callback',success: function(json){
        }
    });

Ajax(三) — json 数据格式

Ajax(三) — json 数据格式

为什么,学习json?

现在异构系统之间消息传递大多数的使用的都是json格式

比如 WebService 基于XML,因为要遵循多种约束,所以传递数据比较麻烦,而且在高并发的情况下,传递数据很慢。而阿里的 dubbo 分布式服务框架(仅限于Java平台使用)的效率就非常非常高


JSON(JavaScriptObject Notation)一种简单的数据格式,比xml更轻巧。JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任何特殊的API或工具包。

JSON的规则很简单:对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’对”之间使用“,”(逗号)分隔。

规则如下:

1)映射用冒号(“:”)表示。名称:值

2)并列的数据之间用逗号(“,”)分隔。名称1:值1,名称2:值2

3) 映射的集合(对象)用大括号(“{}”)表示。{名称1:值1,名称2:值2}

4) 并列数据的集合(数组)用方括号(“[]”)表示。

[ {名称1:值,名称2:值2},{名称1:值,名称2:值2}]

5)元素值可具有的类型:string,number,object,array,true,false,null

/**
 * json中的value可以是:
 *    数字类型,字符串类型,json,[],function
 */
var json1 = {};

var json2 = { //key:value
	name:'aaa',id:1,aaa:function(){
		alert("adsf");
	}
};


var json3 = {//key:value(value又是一个json)
	person:{
		id:1,name:'aa'
	}
};
//json数组
var json4 = [
	{
		id:1,name:'aaa'
	},{
		id:2,name:'bbb'
	}
];

var json5 = {
	setPerson:function(){ //key:value(一个函数)
		
	}
};

var json6 = {//key:json引用
	aaa:json4
};

/**
 * 遍历json
 */
for(var i in json2){
	/**
	 * i代表key值
	 */
	alert(i);
	/**
	 * json2[i]代表value值
	 */
	if(typeof json2[i] == "function"){//如果 value是一个function
		json2[i]();//调用该方法
	}else{
		alert(json2[i]);
	}
}

//查找json中的key,value的一种形式
alert("-------------"+json2["name"]);

//利用该方式可以给一个json动态的加入  key:value
json2['asdf'] = 1;
alert(json2['asdf']);

/**
 * 所以说json的写法非常灵活,只要能解析,就能传递
 */

解析JSON

JSON 只是一种文本字符串。它被存储在 responseText属性中

为了读取存储在 responseText 属性中的 JSON 数据,需要根据 JavaScript 的 eval 语句。函数 eval 会把一个字符串当作它的参数。然后这个字符串会被当作 JavaScript 代码来执行。因为 JSON 的字符串就是由 JavaScript代码构成的,所以它本身是可执行的

json优点:

作为一种数据传输格式,JSON 与XML 很相似,但是它更加灵巧。

JSON 不需要从服务器端发送含有特定内容类型的首部信息。

缺点:

语法过于严谨

代码不易读

Json对象与Java对象之间的相互转换(两种方式)

一、Jackson

Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换

public class JackJsonTest {

	/**
	 * bean 转化 json 字符串
	 * @throws Exception
	 */
	@Test
	public void testBean2Json() throws Exception {
		
		User user = new User();
		user.setDescription("desc1");
		user.setId(1L);
		user.setName("name1");
		
		ObjectMapper mapper = new ObjectMapper();
		String jsonStr = mapper.writeValueAsstring(user);
		System.out.println(jsonStr);
		//writeValue和writeObject有相同的功能
		mapper.writeValue(System.out,user);
		
	}

}
要导入所需

jackson-annotations-2.4.0.jar
jackson-core-2.4.5.jar
jackson-databind-2.4.5.jar

二、如果要将数组、对象、Map、List转换成JSON数据,那我们需要一些jar包:

json-lib-2.4-jdk15.jar
ezmorph-1.0.6.jar
commons-logging.jar
commons-lang.jar
commons-collections.jar
commons-beanutils.jar

@Test
	public void test2(){
		//将数组转换为JSON:
		String[] arr = {"asd","dfgd","asd","234"};
		JSONArray jsonarray = JSONArray.fromObject(arr);
		System.out.println(jsonarray);
		
		//对象转换成JSON:
		User user = new User(1001,"张三");
		JSONArray jsonArray = JSONArray.fromObject(user);  
		System.out.println( jsonArray );  
		
		//把Map转换成json, 要使用jsonObject对象:
		Map<String,Object> map = new HashMap<String,Object>();
		map.put("id",1001);
		map.put("userName","张三");
	
		JSONObject jsonObject = JSONObject.fromObject(map);
		System.out.println(jsonObject);
		
		//把List转换成JSON数据:
		List<User> list = new ArrayList<User>();
		User user = new User(1001,"张三");
		list.add(user);
		list.add(user);
		list.add(user);
		JSONArray jsonArray = JSONArray.fromObject(list);
		System.out.println(jsonArray);
	}

Ajax_数据格式_JSON

Ajax_数据格式_JSON

【JSON】

1.JSON(JavaScript Object Notation)一种简单的数据格式,比xml更轻巧。JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任何特殊的API或工具包。

2.JSON的规则很简单:对象是一个无序的“ ‘ 名称/值’ 对 ”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号) ;“ ‘名称/值’ 对 ” 之间用 “ , ” (逗号) 分隔。

 

【解析JSON】

1.JSON只是一种文本字符串。它被存储在responseText属性中。

 

2.为了读取存储在responseText属性中的JSON数据,需要根据JavaScript的eval语句。函数eval会把一个字符串当做它的参数。然后这个字符串会被当作JavaScript代码来执行。因为JSON的字符串就是由JavaScript代码构成的,所以它本身是可执行的

 

3.JSON提供了json.js包,下载http://www.json.org/json.js后,使用parseJSON()方法将字符串解析成JS对象。

 

【JSON小结】

优点:

--作为一种数据传输格式,JSON与XML很相似,但是它更灵巧。

--JSON不需要从服务器端发送含有特定内容类型的首部信息。

缺点:

--语法过于严谨。

--代码不易读。

--eval函数存在风险。

 

【对比小结】

1.若应用程序不需要与其他应用程序共享数据的时候,使用HTML片段来返回数据时最简单。

2.如果数据需要重用,JSON文件是个不错的选择,其在性能和文件大小方面有优势。

3.当远程应用程序未知时,XML文档是首选,因为XML是web服务领域的“世界语”。

我们今天的关于Ajax和WEB服务数据格式:JSON JSONPajax webservice的分享就到这里,谢谢您的阅读,如果想了解更多关于ajax jsonp其本质 用原生js来处理跨域的数据(jsonp)、ajax JSONP请求 处理回调函数的注意:jsonpCallback是区分大小写、Ajax(三) — json 数据格式、Ajax_数据格式_JSON的相关信息,可以在本站进行搜索。

本文标签: