V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
firhome
V2EX  ›  程序员

当 PHP 头为 json 的时候,jquery 的回调函数会有问题,有人遇到过吗?

  •  
  •   firhome · 2014-05-15 19:27:41 +08:00 · 2566 次点击
    这是一个创建于 3851 天前的主题,其中的信息可能已经有所发展或是发生改变。
    当php的头为json的时候

    js代码:
    var a = 1;

    $ajax post 那个php接口以后

    回调函数设置 a = 2;

    但是a 还是 1;


    有人知道为什么吗?

    <!doctype html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>test jq ajax</title>
    <script src="jquery.js"></script>
    </head>
    <body>
    <a href="###" id="abc">123</a>
    <a href="###" id="bbb">2</a>
    <script type="text/javascript">
    $(document).ready(function(){
    var a;
    $("#bbb").bind('click',function(){
    $.ajax({
    url:'1.php',
    type:'post',
    data:{},
    success:function(){
    a = {a:1};
    console.log(a);
    alert(1)
    }
    })
    });

    $('#abc').bind('click',function(){
    console.log(a);
    })

    });
    </script>
    </body>
    </html>
    8 条回复    2014-05-16 14:21:44 +08:00
    belin520
        1
    belin520  
       2014-05-15 19:29:05 +08:00
    $.getJSON
    firhome
        2
    firhome  
    OP
       2014-05-15 19:29:46 +08:00
    @belin520 为什么呢?和ajax 什么区别
    firhome
        3
    firhome  
    OP
       2014-05-15 19:32:44 +08:00
    @firhome 试了,不行
    qiayue
        4
    qiayue  
       2014-05-15 19:36:41 +08:00
    $.post(
    url,
    {k:v},
    function (){

    },
    'json'
    );
    df
        5
    df  
       2014-05-15 20:35:27 +08:00
    上面相关代码替换成:
    success:function(data){
    console.log(data);
    }

    看看服务器返回的数据是否正确先。


    不知道这些是干嘛用的,你没说清楚,好像多余:
    1.
    <a href="###" id="abc">123</a>

    2.
    $('#abc').bind('click',function(){
    console.log(a);
    })
    df
        6
    df  
       2014-05-15 20:45:38 +08:00
    <!doctype html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>test jq ajax</title>
    <script src="js/jquery-1.7.2.min.js"></script>
    </head>
    <body>
    <a href="###" id="abc">123</a>
    <a href="###" id="bbb">2</a>
    <script type="text/javascript">
    $(document).ready(function(){
    var a;

    $('#abc').bind('click',function(){
    console.log(a);
    })

    $("#bbb").bind('click',
    function(){
    $.ajax({
    url:'1.php',
    type:'post',
    data:{},
    success:function(data){
    a = data.n; // $json = '{"n":2}';
    console.log(a);
    alert(1);
    }
    })
    });
    });
    </script>
    </body>
    </html>
    123123
        7
    123123  
       2014-05-15 23:27:25 +08:00
    只看到了代码里写着 a = {a:1};
    a = 2 在哪里?
    veapon
        8
    veapon  
       2014-05-16 14:21:44 +08:00
    是JS变量作用域的问题吧。
    到了success回调的时候,a已经不再ready的上下文范围了。把a的声明放到$(document).ready()外试试。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2842 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:54 · PVG 20:54 · LAX 04:54 · JFK 07:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.