75 lines
2.4 KiB
JavaScript
75 lines
2.4 KiB
JavaScript
|
/**
|
||
|
* jQuery.ajax mid - CROSS DOMAIN AJAX
|
||
|
* ---
|
||
|
* @author James Padolsey (http://james.padolsey.com)
|
||
|
* @version 0.11
|
||
|
* @updated 12-JAN-10
|
||
|
* ---
|
||
|
* Note: Read the README!
|
||
|
* ---
|
||
|
* @info http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/
|
||
|
*/
|
||
|
|
||
|
jQuery.ajax = (function(_ajax){
|
||
|
|
||
|
var protocol = location.protocol,
|
||
|
hostname = location.hostname,
|
||
|
exRegex = RegExp(protocol + '//' + hostname),
|
||
|
YQL = 'http' + (/^https/.test(protocol)?'s':'') + '://query.yahooapis.com/v1/public/yql?callback=?',
|
||
|
query = 'select * from html where url="{URL}" and xpath="*"';
|
||
|
|
||
|
function isExternal(url) {
|
||
|
return !exRegex.test(url) && /:\/\//.test(url);
|
||
|
}
|
||
|
|
||
|
return function(o) {
|
||
|
|
||
|
var url = o.url;
|
||
|
|
||
|
if ( /get/i.test(o.type) && !/json/i.test(o.dataType) && isExternal(url) ) {
|
||
|
|
||
|
// Manipulate options so that JSONP-x request is made to YQL
|
||
|
|
||
|
o.url = YQL;
|
||
|
o.dataType = 'json';
|
||
|
|
||
|
o.data = {
|
||
|
q: query.replace(
|
||
|
'{URL}',
|
||
|
url + (o.data ?
|
||
|
(/\?/.test(url) ? '&' : '?') + jQuery.param(o.data)
|
||
|
: '')
|
||
|
),
|
||
|
format: 'xml'
|
||
|
};
|
||
|
|
||
|
// Since it's a JSONP request
|
||
|
// complete === success
|
||
|
if (!o.success && o.complete) {
|
||
|
o.success = o.complete;
|
||
|
delete o.complete;
|
||
|
}
|
||
|
|
||
|
o.success = (function(_success){
|
||
|
return function(data) {
|
||
|
|
||
|
if (_success) {
|
||
|
// Fake XHR callback.
|
||
|
_success.call(this, {
|
||
|
responseText: data.results[0]
|
||
|
// YQL screws with <script>s
|
||
|
// Get rid of them
|
||
|
.replace(/<script[^>]+?\/>|<script(.|\s)*?\/script>/gi, '')
|
||
|
}, 'success');
|
||
|
}
|
||
|
|
||
|
};
|
||
|
})(o.success);
|
||
|
|
||
|
}
|
||
|
|
||
|
return _ajax.apply(this, arguments);
|
||
|
|
||
|
};
|
||
|
|
||
|
})(jQuery.ajax);
|