Jquery getJSON 实现跨域请求 --- callback
当前域名访问 me.com 文件
<script type="text/javascript" src="
https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script><script>
$.getJSON('
http://localhost/test.php?callback=?',{p1:'11'},
function
(msg){ //调用域localhost的test.php(其实两个文件在相同目录下) console.dir(msg);})
</script>
localhost/test.php 文件
<?
php
die(
$_GET['callback'].'('.json_encode(
array('msg'=>1)).')'
);?>
getJSON 核心思想是 执行getJSON 注册一个以当前时间命名的function 然后再服务端执行该函数 (具体源码)
1、
-
getJSON: function( url, data, callback ) { return jQuery.get(url, data, callback, "json"); },
2、
function ( url, data, callback, type ) { // shift arguments if data argument was ommited if ( jQuery.isFunction( data ) ) { callback = data; data = null ; } return jQuery.ajax({ type: "GET" , url: url, data: data, success: callback, dataType: type });},get:3、
// Build temporary JSONP function if ( s.dataType == "json" && (s.data && s.data.match(jsre) || s.url.match(jsre)) ) { jsonp = "jsonp" + jsc++ ; // Replace the =? sequence both in the query string and the data if ( s.data ) s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1" ); s.url = s.url.replace(jsre, "=" + jsonp + "$1" ); // We need to make sure // that a JSONP style response is executed properly s.dataType = "script" ; // Handle JSONP-style loadingwindow[ jsonp ] = function (tmp){ data = tmp; success(); complete(); // Garbage collect window[ jsonp ] = undefined; try{ delete window[ jsonp ]; } catch (e){} if ( head ) head.removeChild( script ); }; }