getJSON跨域SyntaxError问题分析,getjsonsyntaxerror
昨天写一个功能:点击手机验证的同时获取json端的数据。
javascript代码如下:
1 2 3 4 5 6 7 8 9 | $( ".check_mobile" ).click( function (){
var mobile = $( '.mobile' ).val();
$.getJSON( "http://www.test.com/user.php?mobile=" +mobile+ "&format=json&jsoncallback=?" , function (data){
if (data.succ == 1) {
var html = "<input type='hidden' name='cityid' value='" +data.data.cityid+ "'><input type='hidden' name='communityid' value='" +data.data.communityid+ "'>" ;
$( ".r_m" ).append(html);
}
});
});
|
Nach dem Login kopieren
user.php代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <?php
if ( $_GET ){
$mobile = $_GET [ 'mobile' ];
if ( $mobile == 'XXXX' ) {
$user = array (
'city' => '石家庄' ,
'cityid' => '1' ,
'community' => '紫晶悦城' ,
'communityid' => '1'
);
$sucess = 1;
$return = array (
'succ' => $sucess ,
'data' => $user
);
} else {
$sucess = 2;
$return = array (
'succ' => $sucess
);
}
echo json_encode( $return );
}
?>
|
Nach dem Login kopieren
相应如下:
问题出来了:
在火狐浏览器中: SyntaxError: missing ; before statement
解决方法如下:
1 2 3 4 | header( "Access-Control-Allow-Origin:http:www.test.com" );
$b = json_encode( $return );
echo "{$_GET['jsoncallback']}({$b})" ;
exit ;
|
Nach dem Login kopieren
最后完整代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?php
header( "Access-Control-Allow-Origin:http:www.test.com" );
if ( $_GET ){
$mobile = $_GET [ 'mobile' ];
if ( $mobile == '18831167979' ) {
$user = array (
'city' => '石家庄' ,
'cityid' => '1' ,
'community' => '紫晶悦城' ,
'communityid' => '1'
);
$sucess = 1;
$return = array (
'succ' => $sucess ,
'data' => $user
);
} else {
$sucess = 2;
$return = array (
'succ' => $sucess
);
}
$b = json_encode( $return );
echo "{$_GET['jsoncallback']}({$b})" ;
exit ;
}
?>
|
Nach dem Login kopieren
如果在 PHP 中少了 header("Access-Control-Allow-Origin:http:www.test.com"); 代码,则会出现
XMLHttpRequest cannot load ''. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin ' ' is therefore not allowed access.
如果少了 echo "{$_GET['jsoncallback']}({$b})"; 代码
在谷歌浏览器中:Uncaught SyntaxError: Unexpected token :
在火狐浏览器中:SyntaxError: missing ; before statement
在实际的网站运用中,纯js实现跨域访问应该说是不可能的,不要相信网上的一些误导,之所以要强调是“在实际的网站运用中”的条件,是因为IE浏览器会给本地的静态网页较高的权限,可以异步访问任何网站,但是如果你把它放到真实的有域归属的网站运用中就不行了。跨域是需要服务器端充当代理的,所以跨域的本质其实是“伪跨域”,这对刚接触ajax的朋友来说有一定的误导性,相信js可以跨域,那你就误入歧途了
基于安全考虑
Jquery 是不能采用这种跨域的.
getjson需要返回callback
http://www.bkjia.com/PHPjc/860468.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/860468.htmlTechArticlegetJSON跨域SyntaxError问题分析,getjsonsyntaxerror 昨天写一个功能:点击手机验证的同时获取json端的数据。 javascript代码如下: $(".check_mobile")....