【jQuery】jQuery官方基本教程的学习笔记4-异步Ajax
2017-12-23 10:24
701 查看
摘要:
Ajax(Asynchornous JavaScript and XML)
主要API -----XMLHttpRequest
不同浏览器Ajax API不同 (jQuery帮助解决了)
不可跨域访问,但出现了一个技术CORS
GET:地址栏可以看到传入到服务器参数值键值对。。。。。
POST:有些数据可以抓包看,通常不会缓存在浏览器。。。。。
注意,IE10以下不支持跨域的AJax请求访问
使用JSONP可以通过js写甲苯实现跨域访问,避免上面的局限
(1)url
请求的URL,必须的
(2)data
(3)success callback
(4)data type
// Using jQuery's Ajax convenience methods
// Get plain text or HTML
$.get( "/users.php", {
userId: 1234
}, function( resp ) {
console.log( resp ); // server response
});
// Add a script to the page, then run a function defined in it
$.getScript( "/static/js/myScript.js", function() {
functionFromMyScript();
});
// Get JSON-formatted data from the server
$.getJSON( "/details.php", function( resp ) {
// Log each key in the response data
$.each( resp, function( key, value ) {
console.log( key + " : " + value );
});
});
// Using .load() to populate an element
$( "#newContent" ).load( "/foo.html" );
// Using .load() to populate an element based on a selector
$( "#newContent" ).load( "/foo.html #myDiv h1:first", function( html ) {
alert( "Content updated!" );
});
// Turning form data into a query string
$( "#myForm" ).serialize();
// Creates a query string like this:
// field_1=something&field2=somethingElse
// Creating an array of objects containing form data
$( "#myForm" ).serializeArray();
// Creates a structure like this:
// [
// {
// name : "field_1",
// value : "something"
// },
// {
// name : "field_2",
// value : "somethingElse"
// }
// ]
// Using validation to check for the presence of an input
$( "#form" ).submit(function( event ) {
// If .required's value's length is zero
if ( $( ".required" ).val().length === 0 ) {
// Usually show some kind of error message here
// Prevent the form from submitting
event.preventDefault();
} else {
// Run $.ajax() here
}
});
// Using a proxy with a prefilter
$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
if ( options.crossDomain ) {
options.url = "http://mydomain.net/proxy/" + encodeURIComponent( options.url );
options.crossDomain = false;
}
});
$.ajax({
url: "http://query.yahooapis.com/v1/public/yql",
// The name of the callback parameter, as specified by the YQL service
jsonp: "callback",
// Tell jQuery we're expecting JSONP
dataType: "jsonp",
// Tell YQL what we want and that we want JSON
data: {
q: "select title,abstract,url from search.news where query=\"cat\"",
format: "json"
},
// Work with the response
success: function( response ) {
console.log( response ); // server response
}
});
$( "#loading_indicator" )
.ajaxStart(function() {
$( this ).show();
})
.ajaxStop(function() {
$( this ).hide();
});
Ajax(Asynchornous JavaScript and XML)
主要API -----XMLHttpRequest
不同浏览器Ajax API不同 (jQuery帮助解决了)
不可跨域访问,但出现了一个技术CORS
一、Key Concepts 关键概念
1.GET和POST
最常用的两种提交到服务器方法(还要其他五种,delete。。。不记得了)GET:地址栏可以看到传入到服务器参数值键值对。。。。。
POST:有些数据可以抓包看,通常不会缓存在浏览器。。。。。
2.Data Types 数据类型
1)text
传送简单的字符串2)html
传输html代码块到页面3)script
添加新的脚本JavaScript到页面4)json
传输json格式的数据,可以包括数组,字符串,对象5)jsonp
从另一个域传输json数据6)xml
使用xml数据传输数据3.A is for Asyncharonous ——A代表异步
Ajax默认异步处理,所以只能通过异步回调函数来处理响应var response; $.get( "foo.php", function( r ) { response = r; }); console.log( response ); // undefined
$.get( "foo.php", function( response ) { console.log( response ); // server response });
4.Same-Origin Policy and JSONP
一般情况下,Ajax请求只在同一协议,端口,域名下执行请求,jQuery可以解决注意,IE10以下不支持跨域的AJax请求访问
使用JSONP可以通过js写甲苯实现跨域访问,避免上面的局限
5.Ajax and Firebug (webkit观察)
二、jQuery's Ajax-Related Methods关于jQuery的Ajax方法
所有方法的核心 $.ajax()1.$.ajax() 详细介绍http://api.jquery.com/jQuery.ajax/
// Using the core $.ajax() method $.ajax({ // The URL for the request url: "post.php", // The data to send (will be converted to a query string) data: { id: 123 }, // Whether this is a POST or GET request type: "GET", // The type of data we expect back dataType : "json", }) // Code to run if the request succeeds (is done); // The response is passed to the function .done(function( json ) { $( "<h1>" ).text( json.title ).appendTo( "body" ); $( "<div class=\"content\">").html( json.html ).appendTo( "body" ); }) // Code to run if the request fails; the raw request and // status codes are passed to the function .fail(function( xhr, status, errorThrown ) { alert( "Sorry, there was a problem!" ); console.log( "Error: " + errorThrown ); console.log( "Status: " + status ); console.dir( xhr ); }) // Code to run regardless of success or failure; .always(function( xhr, status ) { alert( "The request is complete!" ); });在请求的时候,需要告诉请求的数据格式,防止出现响应错误,收不到正确的服务器数据格式,如:需要请求json数据格式,那么头部,需要写上 application/json
2.$.ajax()Options 选项
常用的有下面几个,详细的选项介绍:http://api.jquery.com/jQuery.ajax/1)async
默认为true,如果想同步执行请求,设置false即可。但是,设置成false后,你的请求直到收到响应后才会去执行其他代码块2)cache
缓存,是否设置,默认true,对所有的数据类型dataType有效3)done
如果请求成功,将运行回调函数,该函数将接受响应的数据(json格式转换为js对象),同时,其他数据都是原类型4)fail
如果出现错误,运行该回调函数5)always
不管请求失败还是成功,该回调函数都会运行6)context
回调函数运行的范围7)data
将要发送到服务器的数据,可以是对象,也可以是查询字符串8)dataType
期望从服务器返回的数据类型,如果没有明确指定的话,jQuery将根据响应的MIME来确定9)jsonp
当执行JSONP请求的时候需要发送查询字符串的回到名称,默认就是”callback”10)timeout
超时,单位毫秒,即等待多长服务器响应时间视为失败11)traditional
设置为true则将使用jQu1.4参数序列化风格,详细见http://api.jquery.com/jQuery.param/12)type
请求方式,"POST" 或者"GET",默认为“GET”,其他方式比如"DELETE"也可以,但是可能有些浏览器不支持而已13)url
请求地址URL,是$.ajax()中必须要配置的选项,其他选项都是可选配置的3.Convenience Methods 常用简便方法
只需要简单配置一些选项就可以完成异步请求1)$.get
给提供的URL执行GET请求2)$.post
给提供的URL执行POST请求3)$.getScript
给页面添加js脚本4)$.getJSON
执行GET提交请求,期望返回JSON格式,在不同情况下,该方法将会返回下面这些参数,依次是:(1)url
请求的URL,必须的
(2)data
(3)success callback
(4)data type
// Using jQuery's Ajax convenience methods
// Get plain text or HTML
$.get( "/users.php", {
userId: 1234
}, function( resp ) {
console.log( resp ); // server response
});
// Add a script to the page, then run a function defined in it
$.getScript( "/static/js/myScript.js", function() {
functionFromMyScript();
});
// Get JSON-formatted data from the server
$.getJSON( "/details.php", function( resp ) {
// Log each key in the response data
$.each( resp, function( key, value ) {
console.log( key + " : " + value );
});
});
4.$.fn.load
.load()方法是jQuery ajax所有方法中唯一一个供选择器调用的方法,去填充选择的元素里面的内容// Using .load() to populate an element
$( "#newContent" ).load( "/foo.html" );
// Using .load() to populate an element based on a selector
$( "#newContent" ).load( "/foo.html #myDiv h1:first", function( html ) {
alert( "Content updated!" );
});
三、Ajax and Forms
1.Serialization
1).serialize()
.serialize()方法序列化表单的数据为一个查询字符串,必须要有一个name属性,// Turning form data into a query string
$( "#myForm" ).serialize();
// Creates a query string like this:
// field_1=something&field2=somethingElse
2).serializeArray()
发送一个数据对象,该方法更方便// Creating an array of objects containing form data
$( "#myForm" ).serializeArray();
// Creates a structure like this:
// [
// {
// name : "field_1",
// value : "something"
// },
// {
// name : "field_2",
// value : "somethingElse"
// }
// ]
2.Client-side validate客户端验证
主要用在提交表单前验证,当然也可以在服务器端验证// Using validation to check for the presence of an input
$( "#form" ).submit(function( event ) {
// If .required's value's length is zero
if ( $( ".required" ).val().length === 0 ) {
// Usually show some kind of error message here
// Prevent the form from submitting
event.preventDefault();
} else {
// Run $.ajax() here
}
});
// Validate a phone number field $( "#form" ).submit(function( event ) { var inputtedPhoneNumber = $( "#phone" ).val(); // Match only numbers var phoneNumberRegex = /^\d*$/; // If the phone number doesn't match the regex if ( !phoneNumberRegex.test( inputtedPhoneNumber ) ) { // Usually show some kind of error message here // Prevent the form from submitting event.preventDefault(); } else { // Run $.ajax() here } });
3.Prefiltering
在发送请求钱修改ajax选项// Using a proxy with a prefilter
$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
if ( options.crossDomain ) {
options.url = "http://mydomain.net/proxy/" + encodeURIComponent( options.url );
options.crossDomain = false;
}
});
// Using the optional dataTypes argument $.ajaxPrefilter( "json script", function( options, originalOptions, jqXHR ) { // Do all of the prefiltering here, but only for // requests that indicate a dataType of "JSON" or "script" });
四、Working with JSONP
// Using YQL and JSONP$.ajax({
url: "http://query.yahooapis.com/v1/public/yql",
// The name of the callback parameter, as specified by the YQL service
jsonp: "callback",
// Tell jQuery we're expecting JSONP
dataType: "jsonp",
// Tell YQL what we want and that we want JSON
data: {
q: "select title,abstract,url from search.news where query=\"cat\"",
format: "json"
},
// Work with the response
success: function( response ) {
console.log( response ); // server response
}
});
五、Ajax Events Ajax事件
// Setting up a loading indicator using Ajax Events$( "#loading_indicator" )
.ajaxStart(function() {
$( this ).show();
})
.ajaxStop(function() {
$( this ).hide();
});
相关文章推荐
- 【jQuery】jQuery官方基本教程的学习笔记6-性能Performance
- 【jQuery】jQuery官方基本教程的学习笔记2-事件Events
- 【jQuery】jQuery官方基本教程的学习笔记7-代码组织Code Organization
- 【jQuery】jQuery官方基本教程的学习笔记3-动画效果Effects
- 【jQuery】jQuery官方基本教程的学习笔记5-插件Plugins
- 【jQuery】jQuery官方基本教程的学习笔记8-界面库jQuery UI
- jQuery 学习笔记四 Ajax提交数据
- JQuery学习笔记(2):Ajax的load方法
- [四天学会ajax] 学习Ajax教程第二天,JavaScript 和 Ajax 发出异步请求(下)
- JQuery学习笔记 [Ajax] (6-2)
- jQuery学习笔记:Ajax(二)
- ajax 基本学习笔记。。。
- 阮一峰:jQuery官方基础教程笔记
- 阮一峰:jQuery官方基础教程笔记
- JQuery学习笔记 [Ajax实现新闻点评功能] (6-3)
- jQuery学习笔记:Ajax(一)
- [四天学会ajax] 学习Ajax教程第二天,JavaScript 和 Ajax 发出异步请求(上)
- 学习ajax很好的入门教程--使用 JavaScript 和 Ajax 发出异步请求
- Coolite官方例子学习笔记一:AjaxMethod的运用
- Jquery学习笔记之ajax