Projet

Général

Profil

Paste
Télécharger (2,46 ko) Statistiques
| Branche: | Révision:

root / drupal7 / sites / all / libraries / flexslider-2.5.0 / bower_components / jquery / src / ajax / jsonp.js @ 0aee3c58

1
define([
2
        "../core",
3
        "./var/nonce",
4
        "./var/rquery",
5
        "../ajax"
6
], function( jQuery, nonce, rquery ) {
7

    
8
var oldCallbacks = [],
9
        rjsonp = /(=)\?(?=&|$)|\?\?/;
10

    
11
// Default jsonp settings
12
jQuery.ajaxSetup({
13
        jsonp: "callback",
14
        jsonpCallback: function() {
15
                var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
16
                this[ callback ] = true;
17
                return callback;
18
        }
19
});
20

    
21
// Detect, normalize options and install callbacks for jsonp requests
22
jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
23

    
24
        var callbackName, overwritten, responseContainer,
25
                jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
26
                        "url" :
27
                        typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
28
                );
29

    
30
        // Handle iff the expected data type is "jsonp" or we have a parameter to set
31
        if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
32

    
33
                // Get callback name, remembering preexisting value associated with it
34
                callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
35
                        s.jsonpCallback() :
36
                        s.jsonpCallback;
37

    
38
                // Insert callback into url or form data
39
                if ( jsonProp ) {
40
                        s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
41
                } else if ( s.jsonp !== false ) {
42
                        s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
43
                }
44

    
45
                // Use data converter to retrieve json after script execution
46
                s.converters["script json"] = function() {
47
                        if ( !responseContainer ) {
48
                                jQuery.error( callbackName + " was not called" );
49
                        }
50
                        return responseContainer[ 0 ];
51
                };
52

    
53
                // force json dataType
54
                s.dataTypes[ 0 ] = "json";
55

    
56
                // Install callback
57
                overwritten = window[ callbackName ];
58
                window[ callbackName ] = function() {
59
                        responseContainer = arguments;
60
                };
61

    
62
                // Clean-up function (fires after converters)
63
                jqXHR.always(function() {
64
                        // Restore preexisting value
65
                        window[ callbackName ] = overwritten;
66

    
67
                        // Save back as free
68
                        if ( s[ callbackName ] ) {
69
                                // make sure that re-using the options doesn't screw things around
70
                                s.jsonpCallback = originalSettings.jsonpCallback;
71

    
72
                                // save the callback name for future use
73
                                oldCallbacks.push( callbackName );
74
                        }
75

    
76
                        // Call if it was a function and we have a response
77
                        if ( responseContainer && jQuery.isFunction( overwritten ) ) {
78
                                overwritten( responseContainer[ 0 ] );
79
                        }
80

    
81
                        responseContainer = overwritten = undefined;
82
                });
83

    
84
                // Delegate to script
85
                return "script";
86
        }
87
});
88

    
89
});