Ajax:Async json and xml
1.追加html
.load();
$(document).ready(function () { $('#letter-a a').click(function (e) { e.preventDefault();//取消a点击的默认操作 $('#dictionary').load('a.html'); alert('Loaded!');//其实是异步的,数据没加载显示,便已经弹出 }) });
$('#letter-h a').click(function (e) { e.preventDefault(); $('#dictionary').load('h.html .entry');//有选择的加载 })
2.操作json
$.getJSON() ;
$('#letter-b a').click(function (e) { e.preventDefault(); //$.getJSON('b.json'); //当单击按钮时,我们看不到以上代码的效果。 //因为虽然函数调用加载了文件,但是并没有告诉JavaScript对返回的数据如何处理。 //为此,我们需要使用一个回调函数。 $.getJSON('b.json', function (data) { var html = ''; $.each(data, function (entryIndex, entry) { html += '<div class="entry">'; html += '<h3 class="term">' + entry.term + '</h3>'; html += '<div class="part">' + entry.part + '</div>'; html += '<div class="definition">' + entry.definition + '</div>'; html += '</div>'; }); $('#dictionary').html(html); }) });
3.加载Js文件
$.getScript(); 接受一个URL参数以查找脚本文件
//第一种 $('#letter-c a').click(function (e) { e.preventDefault();//取消a点击的默认操作 $.getScript('c.js');//加载js文件以引用 }); //第二种 $(document.createElement('script'))//创建script .attr({ src: 'http://example.com/example.js' })//src .appendTo('head');
4.加载xml
$.get(); 接受一个URL参数和一个回调函数
$('#letter-d a').click(function (e) { e.preventDefault();//取消a点击的默认操作 $.get('d.xml', function (data) { $('#dictionary').empty();//清空 $(data).find('entry').each(function () { var $entry = $(this); var html = '<div class="entry">'; html += '<h3 class="term">' + $entry.attr('term') + '</h3>'//获取xml节点属性的值 html += '<div class="part">' + $entry.attr('part') + '</div>'//获取xml节点属性的值 html += '<div class="definition">'; html += $entry.find('definition').text(); var $quote = $entry.find('quote'); if ($quote.length) {//如果存在 html += '<div class=quote>'; $quote.find('line').each(function () { html += '<div class="quote-line">' + $(this).text() + '</div>'; }) if ($quote.attr('author')) { html += '<div class="quote-author">' + $quote.attr('author') + '</div>'; } html += '</div>'; } html += '</div></div>'; $('#dictionary').append(html); }) }); })
//entry修改为entry:has(quote)就可以把词条限定为必须包含嵌套的引用元素
//还可以通过entry:has(quote[author])进一步限定词条中的引用元素必须包含author属性
$('#letter-d a').click(function (e) { e.preventDefault();//取消a点击的默认操作 $.get('d.xml', function (data) { $('#dictionary').empty();//清空 $(data).find('entry:has(quote[author])').each(function () {//过滤 var $entry = $(this); var html = '<div class="entry">'; html += '<h3 class="term">' + $entry.attr('term') + '</h3>'//获取xml节点属性的值 html += '<div class="part">' + $entry.attr('part') + '</div>'//获取xml节点属性的值 html += '<div class="definition">'; html += $entry.find('definition').text(); var $quote = $entry.find('quote'); html += '<div class=quote>'; $quote.find('line').each(function () { html += '<div class="quote-line">' + $(this).text() + '</div>'; }) html += '<div class="quote-author">' + $quote.attr('author') + '</div>'; html += '</div>'; html += '</div></div>'; $('#dictionary').append(html); }) }) });
5.GET请求
$.get(); 接受一个URL参数、请求参数好和一个回调函数
$('#letter-f form').submit(function (e) { e.preventDefault(); //$.get('f.php', { term: $('#term').val() }, function (data) { // $('#dictionary').html(data); //}); //简化,便于扩展而不修改此处的js var formValues = $(this).serialize();//将匹配的DOM元素转换成能够随Ajax请求传递的查询字符串 $.get('f.php', formValues, function (data) { $('#dictionary').html(data); }) });
6.POST请求
$.post(); 接受一个URL参数、请求参数好和一个回调函数
$('#letter-e a').click(function (event) { event.preventDefault(); var requestData = { term: $(this).text() }; //$.post('e.php', requestData, function (data) { // $('#dictionary').html(data); //}); //简化 $('#dictionary').load('e.php', requestData); });
7.异常处理
.fial(); .status属性中包含着服务器返回的状态码
$('#letter-e a').click(function (event) { event.preventDefault(); var requestData = { term: $(this).text() }; $.get('z.php', requestData, function (data) { $('#dictionary').html(data); }).fail(function (jqXHR) {//异常处理 $('#dictionary').html('发生异常,异常代码:' + jqXHR.status)//status异常代码 .append(jqXHR.responseText); //responseText异常内容 }) });
7.调用这个远程数据源
$.getJSON(); 参数:一个远程调用数据源的url,以及一个回调函数。
var url = 'http://examples.learningjquery.com/jsonp/g.php'; $('#letter-g a').click(function (e) { e.preventDefault(); $.getJSON(url + '?callback=?', function (data) { var html = ''; $.each(data, function (entryIndex, entry) { html += '<div class="entry">'; html += '<h3 class="term">' + entry.term + '</h3>'; html += '<div class="part">' + entry.part + '</div>'; html += '<div class="definition">'; html += entry.definition; if (entry.quote) { html += '<div class="quote">'; $.each(entry.quote, function (lineIndex, line) { html += '<div class="quote-line">' + line + '</div>'; }); if (entry.author) { html += '<div class="quote-author">' + entry.author + '</div>'; } html += '</div>' } html += '</div></div>'; }); $('#dictionary').html(html); }) })
8.ajax设置参数默认值
$.ajaxSetup();
//由于方法参数过多,设置默认的ajax请求参数 $.ajaxSetup({ url: 'a.html', type: 'POST', dataType:'html' }) $.ajax({ url: 'a.html',//ajaxSetup中已经设置默认值为'a.html',所以,这里可以省略 type: 'GET',//会覆盖掉ajaxSetup默认设置的'POST' success: function (data) { $('#dictionary').html(data); } })