AJAX

2018-07-07  本文已影响0人  Cicada丶

GET vs. POST

数据类型Data Type

Data Type用于指定请求的返回类型

异步

ajax是浏览器异步调用的,发出请求时会挂起该调用,继续执行后续代码,当请求响应时再在主线程执行
剩余代码(JavaScript是单线程的,浏览器是多线程的)
$.get( "foo.php", function( response ) {
    console.log( response ); // server response
});

同源规则

$.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!" );
  });

常用的几个配置属性

设为false如果请求应该同步发送。默认为true。注意,如果将此选项设置为false,您的请求将阻止其他代码
的执行,直到收到响应为止。
除了script和jsonp类型都是默认为true,表示缓存响应数据,在一段时间内发送相同url请求时会直接从
缓存中拿数据
如果请求成功,要运行的回调函数。函数接收响应数据(如果dataType是JSON),以及请求和原始请求对象
的文本状态。
请求失败的时候回调的函数,接受原请求对象和响应状态码
无论失败成功都会执行,接受原请求对象和响应状态码
指定回调方法运行在哪个域中,默认是this
指定要发送给服务端的数据,比如get请求则是foo=bar&baz=bim
json类型需要对数据对象进行转换JSON.stringify(xxx)
contentType: 发送信息至服务器时内容编码类型,简单说告诉服务器请求类型的数据
默认值: "application/x-www-form-urlencoded"
设置需要响应的数据类型,如果不一致会回调失败
设置响应回调名称?
最长等待响应时间
请求类型,get、post。可以是put和delete,但不是所有浏览器都支持
请求的地址,是ajax()方法的唯一必选属性

封装了ajax()方法的简便方法

$.fn.load

.load()方法在jQuery的Ajax方法中是唯一的,因为它是对选择调用的。大.load()方法从URL中获取
HTML,并使用返回的HTML填充所选元素。除了向方法提供URL之外,还可以选择提供一个选择器;jQuery
将只从返回的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"
//   }
// ]
JSON.stringify(obj);
JSON.parse(str);

表单校验

// 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
    }
});
$("#form").on("submit",function (event) {
    event.preventDefault();
});
// 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
    }
});

Jquery预过滤

- 当跨域的时候设置为代理
// 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事件

$.ajax({
   beforeSend: function(){
     // Handle the beforeSend event
   },
   complete: function(){
     // Handle the complete event
   }
   // ......
 });
// Setting up a loading indicator using Ajax Events
$( "#loading_indicator" )
    .ajaxStart(function() {
        $( this ).show();
    })
    .ajaxStop(function() {
        $( this ).hide();
    });
ajaxStart (Global Event)
beforeSend (Local Event)
ajaxSend (Global Event)
success (Local Event)
ajaxSuccess (Global Event)
error (Local Event)
ajaxError (Global Event)
complete (Local Event)
ajaxComplete (Global Event)
ajaxStop (Global Event)

参考http://api.jquery.com/Ajax_Events/

上一篇 下一篇

猜你喜欢

热点阅读