Ajax

AJAX

Ajax (asynchronous Javascript and XML) allows you to upload content from a web page and display it without having to recharge it

Almost any current web page uses this technology: Gmail, Google Maps, YouToube, Facebook, etc

To accomplish this, Ajax builds a layer of additional process between the website and our server

In this way, the requests to the server will be asynchronous, without interfering with the loading process or the actions of the user

While on the browser side, the user can perform actions at any time without being paralyzed waiting for a response from the server

The update of elements is performed through the layer Ajax, dynamically and continuously while the user is still using the page

Elements that make up Ajax

Now let's examine each of the different elements that make up an Ajax application

XMLHTTPRequest

The object XMLHTTPRequest is supported by all modern browsers, starting with Internet Explorer 5+, in addition to Mozilla, Firefox, Konqueror, Opera and Safari

It is supported by a wide variety of platforms, including Microsoft Windows, UNIX / Linux, and Mac OS X

The purpose of this object is to allow Javascript the formulation and sending of HTTP requests to the server

Before using the object, we must call it with its constructor and adapt it according to the peculiarities of each browser

Microsoft was the first to introduce the object, with an implementation of the same as an ActiveX

The rest of browsers have included a native version of the same though implementandolo as a Javascript object

Given that the object depends on what browser and what operating system it is able to use it, you must adapt the code to instancie correctly

In the example above shows how it would be the call of the constructor depending on the browser if using pure Javascript code

If we use the object navigator that stores information about the browser, we could do a conditional comparison according to the type of browser you just using it as a variable:

Properties of the object

  • onreadystatechange

    determines which event handler will be called when you change the property readyState the object

  • readyState

    is an integer value that reports the status of the request:

    • 0 = uninitialized
    • 1 = cárgandose
    • 2 = loaded
    • 3 = interactive
    • 4 = completed
  • responseText

    text string returned by the server that represents the data of the request

  • responseXML

    XML document returned by the server that represents the data of the request

  • status

    code HTTP status returned by the server

  • statusText

    text string returned by the server with a description of the state

Methods of the object

  • abort()

    stops the current request

  • getAllResponseHeaders()

    returns a text string containing all the headers

  • getResponseHeader(x)

    returns a text string with the value of the header x

  • open(‘method’, ‘URL’, ‘a’)

    specifies if the method of the request is GET or POST, the destination URL and if the request should be handled asynchronously (if it is true) or synchronous (if it is false)

  • send(content)

    sends the request with POST data of the form optional

  • setRequestHeader(‘x’, ‘y’)

    defines the parameters with a pair of variable (x) value (y) and is assigned to the header that is sent with the request

Ajax with jQuery

Thanks to jQuery, we can use a code more streamlined and simple that even allows us to forget the type of browser or the system thanks to the methods get(), post(), load() and ajax()

get()

This method requests data to the server with an HTTP GET request

GET is used basically for getting (retrieving) some data from the server

The GET method may return cached data

It has the following syntax:

  • URL

    is the destination address

  • callback

    is an optional parameter that represents the name of the function that will be executed in the event that the application is properly made

In the example we can see how when you press the item button will launch a GET request to the server, which in this case works with the PHP language, to the URL test.php and that contains the code that should be executed

If the request was executed successfully, execute the anonymous function that shows the user a warning with the content of the data parameter and status

post()

This method requests data to the server with an HTTP POST request

POST sends data for processing to a specified resource

The POST method never caches data, and is often used to send data along with the request

It has the following syntax:

  • URL

    is the destination address

  • data

    is an optional parameter that specifies the data that will be sent along with the application

  • callback

    is an optional parameter that represents the name of the function that will be executed in the event that the application is properly made

In the example we can see how when you press the item button will launch a POST request to the server, which in this case works with the PHP language, to the URL user.php and that contains the code about the user that should run

If the request was executed successfully, execute the anonymous function that shows the user a warning with the content of the data parameter and status

load()

This method gets content from the server and adds them to an element of our page

It has the following syntax:

  • URL

    is the destination address

  • data

    is an optional parameter that specifies the data that will be sent along with the application

  • callback

    is an optional parameter that represents the name of the function that will be executed in the event that the application is properly made

    This function must have the following mandatory parameters:

    • responseTxt

      the content of response in case of success

    • statusTxt

      is a text string with the status of the petition, you can be one of the following values:

      • abort
      • error
      • notmodified
      • parsererror
      • success
      • timeout
    • xhr

      contains the object XHTMLRequest, which provides us with additional information about the Ajax request

In the example we can see how when it is finished loading the DOM will load the content of datos.html in the element with the id div01in particular, the elements within this file that have the id p1

When you use a selector for the HTML elements that we want to load, jQuery the filter without problems, as we have seen in this example

We can also load other file types, such as for example .txtbut we have to take into account that has to be carried out by the HTTP protocol and not directly from disk (with file://)

In the event that the request fails, we would see The content will be loaded hereinstead of the loaded content

ajax()

This method performs a request asynchronous HTTP

It has the following syntax:

  • URL

    is an optional parameter that sets out the destination address, if not specified it will add it within the parameter settings as another value more

  • settings

    specifies the data that will be sent along with the application

    Can be specified default values for all Ajax requests using the method ajaxSetup()

In the example we can see that it will launch a POST request to the server, which in this case works with the PHP language, to the URL teams.php and that contains the code that should be executed

In dataType has been specified that it will receive an object of type JSON and it will use the data provided by the method called get_groups with the parameters league that picks up its value from the element with id team-league and season that picks up its value from the element with id team-season

We have included the callback hooks beforeSend,, error, dataFilter, success and complete for ilustar the order in which they are called

Only has code to errorin case of failure of the request and to successin the case that it is correct

If you are running the callback hook successis recorreran all the data received in JSON format and will be added to the element with id team-group that corresponds to an option element of a select field, this new element will be added at the end of the existing

Parameters settings

  • accepts

    assigns a dataType of type MIME, which will be sent in the header of the request

    This header informs the server what type of response will be accepted

    In the example you have assigned a MIME type to work with data in the XML format and the server will return the ‘mycustomtype‘ as we have specified

    To be able to work correctly with the new type, it is necessary to use converters to convert it correctly to the format that we want to return

  • async

    by default, all requests are sent asynchronous (set to true this is the default)

    To configure them synchronously you must asignarsele as false

    Applications cross-domain and the dataType: ‘jsonp’ do not support operations synchronous

    Keep in mind that the requests are synchronous may temporarily lock the browser, disabling any actions while the request remains active

    As of jQuery 1.8 , the use of async: false with jqXHR ($.Deferred) is deprecated; you must use the callback success, error or complete in place of the corresponding methods of the object jqXHR such as jqXHR.done()

  • beforeSend,

    it is a method of event the Ajax that is executed before the call request that can be used to modify the object jqXHR (in jQuery 1.4.x, XMLHTTPRequest) before it is sent

    Can be used to add custom headers, etc

    The objects jqXHR and settings are passed as arguments

    If it returns false, the application will be cancelled

    As of jQuery 1.5, the options are all calls, regardless of the type of application

  • cache

    if it is set to falsewill force the browser not to cache the pages requested

    Established in false will only work correctly with HEAD requests, and GET if it has been added ‘_ = {timestamp}‘ to GET parameters

    The parameter is not required for other types of requests, except in IE8 when a POST to a URL that has already been requested with GET

  • complete

    it is a method of event the Ajax that is executed after the events success and error

    This method passes two arguments: jqXHR (in jQuery 1.4.x, XMLHTTPRequest) and a text string with the status of the application (‘success‘, ‘notmodified‘, ‘nocontent‘, ‘error‘, ‘timeout‘, ‘abort‘, or ‘parsererror‘)

    As of jQuery 1.5, you can accept multiple requests and each one will turn

  • contents

    determines how jQuery will parse the response, given its content type, supports regular expressions (added in jQuery 1.5)

  • contentType

    type of content with which to send the data to the server
    The default value is ‘application/x-www-form-urlencoded; charset=UTF-8

    If you pass explicitly a content type to $.ajax(), will always be sent to the server (even if no data is sent)

    From jQuery 1.6 you can pass false to tell jQuery not to set any content-type header

    The W3C specification XMLHttpRequest it says that the charset should always be UTF-8; specifying another charset will not obligaráal browser to change the encoding

    For requests to cross-domain, when it is other than ‘application/x-www-form-urlencoded‘, ‘multipart/form-data‘, or ‘text/plain‘, the browser will perform checks prior to sending the request to the server

  • context

    context for all responses of the request, by default, the context is an object that represents the settings used in the call ($.ajaxSettings along with the settings you've entered with $.ajax() )

    For example, specifying a DOM element as the context will make its context to the event callback complete is:

  • converters

    method to convert the returned value to the format that we need them as answer (added in jQuery 1.5)

  • crossDomain

    is used to force a request crossDomain (such as JSONP) on the same domain, you must set the value of crossDomain to true

    This allows, for example, the redirection from the server to another domain (added in jQuery 1.5)

  • data

    data that is to be send to the server, will be converted to a query string

    Will be added to the url in GET requests

    Query the option processData to avoid this automatic process

    In the case of an array, jQuery serialize multiple values with the same key depending on the value of the setting of traditional

  • dataFilter

    method that will be used to handle the response data from the raw XMLHttpRequest

    It accepts two parameters:

    • data

      the raw data returned by the server

    • dataType
  • dataType

    type of data expected by the server

    If none is specified, jQuery will try to inferirlo based on the MIME type of the response (MIME type XML generate XML, in 1.4 JSON will generate a JavaScript object, in 1.4 script will execute the script, and any other type will be returned as a string)

    The available types (and the result passed as the first argument to your callback is accepted) are:

    • xml

      returns an XML document that can be processed via jQuery

    • html

      returns an HTML document as text without format; the labels of included script will be evaluated when inserted in the DOM

    • script

      evaluates the response as JavaScript and it is returned as plain text

      Disables caching by adding a parameter in the query string ‘_ = {timestamp}‘ to the URL unless the cache option is set as true

      In this case the POST will be converted to GET to the requests of remote-domain

    • json

      evaluates the response as JSON and returns a JavaScript object

      The json requests callback placeholder, for example ‘?callback=?‘, is made using JSONP unless the application includes jsonp: false in the configuration of the request

      The JSON data is parsed in a strict sense; any JSON with incorrect format will be rejected and will throw an error

      As of jQuery 1.9, we also reject the answers empty; the server should return a response null or {} in its place (see json.org for more information on the correction of the JSON format)

    • jsonp

      load in a block-JSON-using JSONP

      Adds ‘?callback=?‘ at the end of your URL to specify the callback of the request

      Disables caching by adding a parameter in the query string ‘_ = {timestamp}‘ to the URL unless the cache option is set as true

    • text

      string of text without format

    • multiple values separated by spaces

      as of jQuery 1.5, it is possible to convert a dataType received in the header Content-Type the necessary

      For example, if you want a string of text to be treated as XML, use ‘text xml

      You can also make a request JSONP, received as text, and will be interpreted by jQuery as XML: ‘jsonp text xml

      Similarly, the chain-shortened ‘jsonp xml‘ first, it will attempt to convert from jsonp to xml, and, failing that, convert from jsonp to text, and then text-to-xml

  • error

    event Ajax that will be called if the request fails

    As of jQuery 1.5, supports an array of methods and each one will be called per turn

    It will be called with requests cross-domain script and JSONP

    Receives the following parameters:

    • jqXHR

      (in jQuery 1.4.x, XMLHttpRequest)

    • text string

      describes the type of error that occurred

      Supports the following values:

      • null

        it is not a string, it is the literal null

      • timeout
      • error
      • abort
      • parsererror
    • errorThrown

      subject to certain exceptions, it is optional

      When an HTTP error occurs, errorThrown a party receives text of the HTTP status, such as ‘Not Found‘ or ‘Internal Server Error‘ with this parameter we can replace your options and configure it

  • global

    enables the use of several global events and Ajax
    Its default value is true

    Use false to avoid that the global events ajaxStart or ajaxStop are assets

  • headers

    additional headers sent along with the request using XMLHttpRequest, able to modify the object by changing the value X-Requested-With: XMLHttpRequest

    It is also possible to change the value with the event, Ajax beforeSend, (added in jQuery 1.5)

  • ifModified

    check the value of header Last-Modified to see if the last request was successful

    Its default value is falseignore the header

    Since jQuery 1.4, it also verifies the value of ‘etag‘ specified by the server to catch unmodified data

  • isLocal

    allows the current environment to be recognized as ‘local‘ (for example, the file system), even if jQuery does not recognize it as such by default

    The following protocols are currently recognized as local:

    • file
    • *-extension
    • widget

    If the configuration of isLocal needs to be modified, it is recommended to do it with the method $.ajaxSetup() (added in jQuery 1.5.1)

  • jsonp

    overrides the response function of the requests JSONP

    This value will be used in place of the ‘callback‘ in the query string of the url when you add ‘callback=?

    For example {jsonp:’onJSONPLoad’} return to the server ‘onJSONPLoad=?

    As of jQuery 1.5, setting jsonp to false to avoid that jQuery add the string ‘?callback‘ to the URL or attempting to use ‘=?‘ to perform the transformation

    In this case, you must explicitly set the configuration to jsonpCallback

    For example, { jsonp: false, jsonpCallback: ‘callbackName’ }

    For safety reasons, if the target receptor is not trusted, it is recommended to configure the property jsonp to false

  • jsonpCallback

    specifies the name of the function to return a request JSONP

    This value will be used instead of the random name automatically generated by jQuery

    It is recommended to let jQuery generate this unique name, since that will facilitate the management of requests and will be able to better control the callbacks and exceptions error

    It is possible to specify the return of the request when it is enabled the browser cache for GET requests

    As of jQuery 1.5, you can also use a function to set it up, in which case the value of jsonpCallback it is set with the return value of that function

  • method

    HTTP method that is utilirá in the request (for example ‘POST‘, ‘GET‘, ‘PUT‘ (added in jQuery 1.9.0)

  • mimeType

    mime type that overrides the mime type XHR (added in jQuery 1.5.1)

  • password

    password that will be used with XMLHttpRequest as a response to a request of authentication of HTTP access

  • processData

    by default, the data passed to data (anything that is not a string) will be processed and transformed to a query string, which will be set to the default content type ‘application/x-www-form-urlencoded

    To send a DOMDocument or other data is not processed, set it to false

  • scriptAttrs

    defines additional attributes for use in requests ‘script‘ or ‘jsonp

    Where:

    • key

      represents the name of the attribute

    • value

      is the value of the attribute

    When you receive this object, you will force the use of the script tag transport

    For example, can be used to declare attributes nonce, integrity or crossorigin to meet the requirements of the security policy of the content (added in jQuery 3.4.0)

  • scriptCharset

    only used with the ‘script‘ transport

    Defines the attribute charset in the script tag used in the request

    It is used when the character set on the local page is not the same as that of the remote script

    Alternatively, the attribute charset it can be defined with scriptAttrs, which will also ensure the use of transport ‘script

  • statusCode

    numeric codes HTTP and functions that will be called as a response to that code

    For example, when the response status is a 404, it will display a prompt to the user:

    If the request is successful, the status code of the function will take the same parameters as the return of the petition to be correct; if an error occurs (including the redirection 3xx), it will take the same parameters as the error callback (added in jQuery 1.5 )

  • success

    event Ajax call if the request is correct

    It has the following arguments:

    • data

      data returned by the server, formatted according to the parameter dataType or the callback function dataFilterif one has been defined

    • textStatus

      text string that describes the state

    • jqXHR

      (in jQuery 1.4.x, XMLHttpRequest)

    As of jQuery 1.5, supports an array of methods and each one will be called per turn

  • timeout

    sets a timeout (in milliseconds) for the request
    The value 0 means no timeout

    This will override any global timeout set with the $.ajaxSetup()

    The timeout period begins when the call is made to $.ajax

    If there are other requests in progress and the browser has no connections available, it is possible that any request to time out before it can be sent

    As of jQuery 1.4.x, the object XMLHttpRequest it will take the state to invalid if the request times out

    To access any field of the object can generate an exception

    Only in Firefox 3.0+, applications, script and JSONP are not cancelled by a timeout; the script will run even if it is received after a timeout

  • traditional

    the value will true if you want to use the traditional style of parameters serialized

  • type

    alias for method. Use type for versions of jQuery prior to 1.9.0

  • url

    string that contains the URL to which to send the request

  • username

    user name that will be used with XMLHttpRequest in response to a request of authentication of HTTP access

  • xhr

    return of the request to create the object XMLHttpRequest

    Its default value is ActiveXObject when available (IE), XMLHttpRequest otherwise

    Sobreescribalo to provide your own implementation of XMLHttpRequest or any improvement own

  • xhrFields

    defines the native object XHR (added in jQuery 1.5.1 )

    For example, can be used to define withCredentials to true for requests cross-domain, if necessary:

    In jQuery 1.5, the property withCredentials it is not native to XHR and therefore, the requests CORS (Cross-Origin Resource Sharing) that the require be ignored

    For this reason, I recommend using jQuery 1.5.1+ should you require to be used