getJSON跨域SyntaxError问题分析

5年以前  |  阅读数:1112 次  |  编程语言:PHP 

昨天写一个功能:点击手机验证的同时获取json端的数据。

javascript代码如下:


    $(".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);
    }
    });
    });

user.php代码如下:


    <?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);
    }
    ?>

相应如下:

问题出来了:

在火狐浏览器中: SyntaxError: missing ; before statement

解决方法如下:


    header("Access-Control-Allow-Origin:http:www.test.com");
    $b = json_encode($return);
    echo "{$_GET['jsoncallback']}({$b})";
    exit;

最后完整代码:


    <?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;
    }
    ?>

如果在 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

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例