美文网首页
10 Talk to the server with Ajax

10 Talk to the server with Ajax

作者: 闷油瓶小张 | 来源:发表于2015-10-20 15:26 被阅读15次

    This chapter covers

    • A brief overview of Ajax
    • Loading preformatted HTML from the server
    • Making GET and POST requests
    • Exerting fine-grained control over requests
    • Setting default Ajax properties
    • Handling Ajax events

    10.1 Brushing up on Ajax

    10.1.1 Creating an XHR instance


    var xhr;
    if (window.ActiveXObject) {
      xhr = new ActiveXObject ('Microsoft.XMLHTTP');
    } else if (window.XMLHttpRequest) {
      xhr = new XMLHttpRequest();
    } else {
      throw new Error('Ajax is not supported by this browser')
    }
    

    XMLHttpRequest (XHR) methods and properties

    Method Description
    abort()
    getAllResponseHeaders()
    getResponseHeader(name)
    open(method, url[, async[, username[, password]]])
    overrideMimeType(mime)
    send([content])
    setRequestHeader(name, value)
    onreadystatechange
    readyState
    response
    responseText
    responseType
    responseXML
    status
    statusText
    timeout
    ontimeout
    upload
    withCredentials

    10.1.2 Initiating the request


    1. Specify the HTTP method (such as POST or GET).
    2. Provide the URL of the server-side resource to be contacted.
    3. Let the XHR instance konw how it can inform you of its progress.
    4. Provide any body content for requests such as POST.
    xhr.open('GET', '/some/resource/url');
    xhr.send('a=1&b=2&c=3');
    

    10.1.3 Keeping track of progress


    xhr.onreadystatechange = function() {
      if (this.readyState === 4) {
        if (this.status >= 200 && this.status < 300) {
          // Success
        } else {
          // Problem
        }
      }
    }
    

    10.1.4 Getting the response


    • Instanitiating an XHR object requires browser-specific code.
    • Ready handlers need to sift through a lot of uninteresting state changes.
    • The response body needs to be dealt with in numerous ways, depending on its format.

    10.2 Loading content into elements


    var xhr;
    if (window.ActiveXObject) {
     xhr = new ActiveXObject('Microsoft.XMLHTTP');
    } else if (window.XMLHttpRequest) {
     xhr = new XMLHttpRequest();
    } else {
     throw new Error('Ajax is not supported by this browser');
    }
    xhr.onreadystatechange = function() {
     if (this.readyState === 4) {
     if (this.status >= 200 && this.status < 300) {
     document.getElementById('elem').innerHTML = this.responseText;
     }
     }
    }
    xhr.open('GET', 'some-resource');
    xhr.send();
    

    10.2.1 Loading content with jQuery


    load(url[, data][, callback])
    Parameters
    url (String)
    data (String|Object|Array)
    callback (Function)
    Returns
    The jQuery collection.

    var updates = 1;
    function pollInfo() {
      $('#container').load('/check-updates', function(responseText, textStatus, jqXHR) {
        if(textStatus === 'success') {
          $('#status-update').text('Data updated. Update #' + updates);
           updates++;
        }
        setTimeout(pollInfo, 1000);
      });
    }
    pollInfo();
    

    serialize()
    Parameters
    none
    Returns
    The formatted query string.


    serializeArray()
    Parameters
    none
    Returns
    The array of form data.


    10.2.2 Loading dynamic HTML fragments


    $('#boot-chooser-control').change(function(event) {
     $('#product-detail-pane').load(
     'actions/fetch-product-details.php',
     {
     model: $(event.target).val()
     },
     function() {
     $('[value=""]', event.target).remove();
     }
     );
    });
    
    $('#boot-chooser-control')
     .load('actions/fetch-boot-style-options.php')
     .change(function(event) {
     $('#product-detail-pane').load(
     'actions/fetch-product-details.php',
     {
     model: $(event.target).val()
     },
     function() {
     $('[value=""]', event.target).remove();
     }
     );
     });
    

    10.3 Making GET and POST requests

    10.3.1 Getting data with GET


    $.get(url[, data][, callback][, dataType])
    Parameters
    url (String)
    data (String|Object)
    callback (Function)
    dataType (String)
    Returns
    The jqXHR instance.

    $('#boot-chooser-control')
     .change(function(event) {
     $.get(
     'actions/fetch-product-details.php',
     {
     model: $(event.target).val()
     },
     function(response) {
     $('#product-detail-pane').html(response);
     $('[value=""]', event.target).remove();
     }
     );
     });
    

    10.3.2 Getting JSON data


    $.getJSON(url [, data][, callback])
    Returns
    The jqXHR instance


    10.3.3 Dynamically loading script


    $.getScript(url[, callback])
    Returns
    The jqXHR instance.

    getScript: function(url, callback) {
      return jQuery.get(url, undefined, callback, "script");
    }
    
    $('#load-button').click(function() {
     $.getScript('external.js');
     });
     $('#inspect-button').click(function() {
     someFunction(someVariable);
     });
    

    10.3.4 Making POST requests


    $.post(url[, data][, callback][, dataType])
    Returns
    The jqXHR instance


    10.3.5 Implementing cascading dropdowns


    $bootChooser.change(function() {
     $('#product-detail-pane').load(
     'actions/fetch-product-details.php',
     $(this).serialize()
     );
     // More to follow
    });
    
    $bootChooser.change(function() {
     $('#product-detail-pane').load(
     'actions/fetch-product-details.php',
     $(this).serialize()
     );
     // More to follow
    });
    
    $colorChooser.change(function() {
     $sizeChooser.load(
     'actions/fetch-size-options.php',
     $colorChooser
     .add($bootChooser)
     .serialize(),
     function() {
     $(this).prop('disabled', false);
     }
     );
    });
    

    10.4 Taking full control of an Ajax request

    10.4.1 Making Ajax requests with all the trimmings


    $.ajax(url[, options])
    $.ajax([options])
    Parameters
    url (String)
    options (Object)
    Returns
    The jqXHR instance.

    Options for the $.ajax() utility function

    Name Description
    url
    method
    data
    dataType
    cache
    context
    timeout
    global
    contentType
    success
    error
    complete
    beforeSend
    async
    processData
    contents
    converters
    crossDomain
    headers
    dataFilter
    ifModified
    isLocal
    jsonp
    jsonpCallback
    username
    password
    scriptCharset
    statusCode
    xhr
    xhrFields
    accepts
    mimeType
    traditional

    10.4.2 Setting request defaults


    $.ajaxSetup(options)
    Parameters
    options (Object)
    Returns
    undefined

    $.ajaxSetup({
      type: 'POST',
      timeout: 5000,
      dataType: 'html'
    });
    

    10.4.3 Handling Ajax events


    jQuery Ajax event types

    Event name Type Description
    ajaxStart Global
    beforeSend Local
    ajaxSend Global
    success Local
    ajaxSuccess Global
    error Local
    ajaxError Global
    complete Local
    ajaxComplete Global
    ajaxStop Global

    ajaxComplete(callback)
    ajaxError(callback)
    ajaxSend(callback)
    ajaxStart(callback)
    ajaxStop(callback)
    ajaxSuccess(callback)
    Parameters
    callback (Function)
    Returns
    The jQuery collection.

    var $log = $('#log');
    $(document).on(
     'ajaxStart ajaxStop ajaxSend ajaxSuccess ajaxError ajaxComplete',
     function(event) {
     $log.text($log.text() + event.type + '\n');
     }
    );
    

    10.4.4 Advanced Ajax utility functions


    $.ajaxPrefilter([dataTypes,] callback)
    Parameters
    dataTypes (String)
    callback (Function)
    Returns
    undefined

    $.ajaxPrefilter('xml', function(options, originalOptions, jqXHR) {
     if ($.inArray(options.url, originalOptions.deniedDomains) !== -1) {
     console.log('Ajax request to ' + options.url + ' aborted');
     jqXHR.abort();
     } else {
     console.log('Ajax request performed');
     }
    });
    $.ajax(
     'http://www.google.com',
     {
     dataType: 'xml',
     deniedDomains: [
     'http://www.google.com',
     'http://www.manning.com'
     ]
     }
    );
    

    $.ajaxTransport([dataType], callback)
    Parameters
    dataType (String)
    callback (Function)
    Returns
    undefined


    10.5 Summary

    load()
    $.get()
    $.getJSON()
    $.post()
    $.ajax()
    $.ajaxSetup()
    ajaxStart()
    ajaxSend()
    ajaxSuccess()
    ajaxError()
    ajaxComplete()
    ajaxStop()

    相关文章

      网友评论

          本文标题:10 Talk to the server with Ajax

          本文链接:https://www.haomeiwen.com/subject/orbzcttx.html