• 请不要在回答技术问题时复制粘贴 AI 生成的内容
jianghu52
V2EX  ›  程序员

大家一般调试 js 的时候怎么看变量呢?我被 undefined 给整死了

  •  
  •   jianghu52 · Nov 2, 2014 · 7683 views
    This topic created in 4231 days ago, the information mentioned may be changed or developed.
    今天做一个小东西,ajax传值到php后台,返回一个josn字符串,alert出来,就是undefined 的,被整的死去活来。
    以前一直有个问题,动不动js alert的东西就是undefined ,我想知道一般人调试js的时候有什么好办法么?都是怎么alert变量的?
    14 replies    2014-11-03 14:16:01 +08:00
    qqblog
        1
    qqblog  
       Nov 2, 2014
    webkit内核的浏览器都有Inspector,可断点调试JavaScript
    xcatliu
        2
    xcatliu  
       Nov 2, 2014
    一般就用 chrome 的 develop tools 吧,可以设置断点看变量值是什么。
    涉及 ajax 的看看 network。
    puras
        3
    puras  
       Nov 2, 2014
    调JS一直用FireFox中的FireBug,可以断点调试,也可以直接使用console.log打印变量。。。
    还可查看好多东西,如LS所说的Network等
    arslion
        4
    arslion  
       Nov 2, 2014
    我比较粗暴, 直接console.log哈哈
    NemoAlex
        5
    NemoAlex  
       Nov 2, 2014
    alert 出来是 undefined,就是 undefined 咯
    ibigbug
        6
    ibigbug  
       Nov 2, 2014
    看 network
    如果嫌 alert 麻烦的话直接用 chrome 在 source 里面打断点
    lincanbin
        7
    lincanbin  
       Nov 2, 2014
    ajax的回调里是一个匿名函数,表面看起来你这个回调函数可能包在另一个函数里,但是实际上是异步执行,已经是另一个函数了,这个回调里能使用的变量,只有全局变量。
    直接在回调函数里调用包着Ajax的那个函数里的变量是最常见的JavaScript作用域错误。
    cdxem713
        8
    cdxem713  
       Nov 2, 2014
    @lincanbin 不对吧,根据js的闭包,在回调函数里面肯定是能够用外部的局部变量的。
    例如一般用ajax不都这么用么?
    function getSomething() {
    var ajax = new XmlHttpRequest();
    ajax.open("get",url,true);
    ajax.onreadystatechange= function() {
    if (ajax.readyState== 4) {
    if (ajax.status == 200) {
    ...........
    }
    }
    };
    ajax.send(null)
    }
    cdxem713
        9
    cdxem713  
       Nov 2, 2014
    @lincanbin 唯一会出现问题的只有settimeout和setinterval,这两个的回调函数的外部应该是全局那个域。
    具体的没有描述清楚,可以写个东西试试。
    zhouzm
        10
    zhouzm  
       Nov 2, 2014
    变量定义全加上 var ,基本上大部分变量作用域的问题就清除了,剩下的再利用 develop tools 断点调试吧
    domino
        11
    domino  
       Nov 2, 2014
    chrome console
    shuson
        12
    shuson  
       Nov 3, 2014
    除了source里断点和network直接找request,response,还有其他好办法么?
    不喜欢console.log打乱代码
    zhhc
        13
    zhhc  
       Nov 3, 2014
    chrome 的console,network,beakpoints
    jprovim
        14
    jprovim  
       Nov 3, 2014
    chrome做調試, 直接console.log. 與其debug不如花點時間去理解下JavaScript裡面的closure.
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5456 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 59ms · UTC 08:54 · PVG 16:54 · LAX 01:54 · JFK 04:54
    ♥ Do have faith in what you're doing.