V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
qq286735628
V2EX  ›  问与答

jQuery有没有什么异常处理机制?最近写代码,同样的代码,会有不同的结果,想找找原因

  •  
  •   qq286735628 · 2012-07-12 11:35:43 +08:00 · 3881 次点击
    这是一个创建于 4549 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在单单用console.log()感觉都不够用,提示不全面~
    不知道大家有没什么好推荐
    10 条回复    1970-01-01 08:00:00 +08:00
    nigelvon
        1
    nigelvon  
       2012-07-12 11:38:05 +08:00
    最好用代码举例吧,我还没遇到过用console搞不定的。有时候需要用匿名函数先把变量放到另一个副本里,否则变量的值不是当时的值。
    qq286735628
        2
    qq286735628  
    OP
       2012-07-12 11:43:54 +08:00
    @nigelvon
    页面脚本
    <script type="text/javascript" src="jquery.min.js"></script>
    <script type="text/javascript">
    $('#btn1').click(function(){
    $.getScript('http://192.168.1.131:8088/pj4/wqserv/wqserv.php',function(){
    $('#ad').append('192.168.1.131 connect success<br/>');
    console.log(data);
    });
    });

    $('#btn2').click(function(){
    $.getScript('http://192.168.1.62:80/pj4/adserv/adserv.php',function(){
    $('#ad').append('192.168.1.62 connect success<br/>');
    console.log(data);
    });
    });
    </script>

    两个php脚步,对应的输出是标准的JSON
    出现的问题很奇怪,IP结尾是62的,append没有效果,但是Firebug查看网络,的确GET 成功了,并且有JSON的数据
    qq286735628
        3
    qq286735628  
    OP
       2012-07-12 11:49:06 +08:00
    两组getScript发出的请求头不一样,里面的Accept和X-Requested-With不同

    btn2发出的请求头:

    GET /pj4/adserv/adserv.php?_=1342064740843 HTTP/1.1
    Host: 192.168.1.62
    User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:13.0) Gecko/20100101 Firefox/13.0.1
    Accept: text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01
    Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding: gzip, deflate
    Connection: keep-alive
    X-Requested-With: XMLHttpRequest
    Referer: http://192.168.1.62/pj4/client/ad.html

    btn1发出的请求头:

    GET /pj4/wqserv/wqserv.php?_=1342064760841 HTTP/1.1
    Host: 192.168.1.131:8088
    User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:13.0) Gecko/20100101 Firefox/13.0.1
    Accept: */*
    Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding: gzip, deflate
    Connection: keep-alive
    Referer: http://192.168.1.62/pj4/client/ad.html
    nigelvon
        4
    nigelvon  
       2012-07-12 11:50:17 +08:00
    @qq286735628 data貌似没定义哦。另外你直接跨域拿json不用jsonp么?
    bitsmix
        5
    bitsmix  
       2012-07-12 11:51:42 +08:00
    $.get(url, function(data) {
    console.log(data);
    });

    btw 建议别用 data 这个没任何意义的变两名。

    哪怕用 response 呢。。
    cute
        6
    cute  
       2012-07-12 11:52:53 +08:00
    qq286735628
        7
    qq286735628  
    OP
       2012-07-12 11:58:09 +08:00
    @nigelvon 实际代码有在function(data),这个是刚才想找问题的时候,给去掉,所以没
    jsonp之前尝试了几次,总是跨域不成功,用getScript就成功了,不过现在又出问题,估计和我之前用jsonp的原因差不多。

    @bitsmix thanks。
    我看到有的人function(response, textStatus),有两个参数,第二个参数是做什么用的?

    @cute thanks。我去研究下

    EveryBody,为啥我两个请求头是不一样的?
    micate
        8
    micate  
       2012-07-12 12:33:19 +08:00   ❤️ 1
    ... 请求头不同(其实就是 Accept 不同)是因为跨域了。

    非跨域请求 jQuery 会使用 XMLHttpRequest,跨域或显式指定的话,jQuery 会使用 jsonp 请求。
    jsonp 本质上就是 script,附加了回调函数,而请求结果是不可预知的,所以 Accept 会不同。

    参考:http://bugs.jquery.com/ticket/7694#comment:1
    bitsmix
        9
    bitsmix  
       2012-07-12 13:10:34 +08:00
    @qq286735628 try before ask.
    qq286735628
        10
    qq286735628  
    OP
       2012-07-12 15:00:45 +08:00
    @cute error函数在跨域和jsonp请求下不可用
    @bitsmix
    现在通过这种方式,可以找到问题了
    complete : function(jqXHR, textStatus){
    console.log('complete jqXHR = ' + "%o",jqXHR);
    console.log('complete textStatus = ' + textStatus);
    }
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3077 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 13:29 · PVG 21:29 · LAX 05:29 · JFK 08:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.