一、$.ajax用法与举例
jQuery.ajax(url,[settings]) ——返回值:XMLHttpRequest
通过 HTTP 请求加载远程数据,这个是jQuery 的底层 AJAX 实现。简单易用的高层实现见 $.get, $.post 等。
最简单的情况下,$.ajax()可以不带任何参数直接使用。
$.ajax({ type:'GET', url:'http://www.phpernote.com/jquery.php', data:{username:'phpernote',password:'123456'}, dataType:'json', timeout:3000, cache:false, async:true, beforeSend:function(){ alert('请求之前'); }, success:function(data){ alert('请求成功'); }, error:function(msg){ alert('请求发生错误'); } });
参数:
jsonpCallback 为 jsonp 请求指定一个回调函数名。这个值将用来取代 jQuery 自动生成的随机函数名。这主要用来让 jQuery 生成度独特的函数名,这样管理请求更容易,也能方便地提供回调函数和错误处理。你也可以在想让浏览器缓存 GET 请求的时候,指定这个回调函数名。
处理函数:
二、jQuery.getJSON
jQuery.getJSON( url, [data], [callback] ) —— 跨域加载JSON数据。
该函数是简写的 Ajax 函数,等价于:
$.ajax({
url: url,
data: data,
success: callback,
dataType: json
});
经由getJSON得到的数据已经变成了一个对象数组,可以直接使用 response.name,response.url 获取返回值。
简单示例:
<script language="javascript" type="text/javascript"> function getJSON(){ $.getJSON("http://www.phpernote.com/test.php", {}, function(response){ alert(response.url); }); } </script> <input type="button" name="btn" id="btn" value="test" onClick="javascript:getJSON();"/>
定义的服务器脚本文件(返回JSON数据)http://www.phpernote.com/test.php:
<?php $arr=array("name"=>"php程序员教程网", "url"=>'http://www.phpernote.com/'); $jarr=json_encode($arr); echo $jarr;
注意:
三、解析JSON数据
$.each()是用来在回调函数中解析JSON数据的方法,下面是官方文档:
jQuery.each(collection, callback(indexInArray, valueOfElement) )
$.each()方法接受两个参数,第一个是需要遍历的对象集合(JSON对象集合),第二个是用来遍历的方法,这个方法又接受两个参数,第一个是遍历的index,第二个是当前遍历的值。哈哈,有了$.each()方法JSON的解析就迎刃而解咯。
JSON数据如下,是一个嵌套JSON:
{"comments":[{"content":"很不错嘛","id":1,"nickname":"纳尼"},{"content":"哟西哟西","id":2,"nickname":"小强"}]}
解析代码
function loadInfo() { $.getJSON("loadInfo", function(data) { $("#info").html("");//清空info内容 $.each(data.comments, function(i, item) { $("#info").append( "<div>" + item.id + "</div>" + "<div>" + item.nickname + "</div>" + "<div>" + item.content + "</div><hr/>"); }); }); }
如果返回的JSON数据比较复杂,则只需多些$.each()进行遍历即可,嘿嘿。例如如下JSON数据:
{ "comments": [{"content": "很不错嘛","id": 1, "nickname": "纳尼" }, {"content": "哟西哟西", "id": 2,"nickname": "小强"}], "content": "你是木头人,哈哈。", "infomap": { "性别": "男", "职业": "程序员", "博客": "http:\/\/www.cnblogs.com\/codeplus\/" }, "title": "123木头人" }
解析代码
function loadInfo() { $.getJSON("loadInfo", function(data) { $("#title").append(data.title+"<hr/>"); $("#content").append(data.content+"<hr/>"); //jquery解析map数据 $.each(data.infomap,function(key,value){ $("#mapinfo").append(key+"----"+value+"<br/><hr/>"); }); //解析数组 $.each(data.comments, function(i, item) { $("#info").append( "<div>" + item.id + "</div>" + "<div>" + item.nickname + "</div>" + "<div>" + item.content + "</div><hr/>"); }); }); }
值得注意的是,$.each()遍历Map的时候,function()中的参数是key和value,十分方便。
上例的运行效果:
参考: