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

2012-07-12 11:35:43 +08:00
 qq286735628
现在单单用console.log()感觉都不够用,提示不全面~
不知道大家有没什么好推荐
3858 次点击
所在节点    问与答
10 条回复
nigelvon
2012-07-12 11:38:05 +08:00
最好用代码举例吧,我还没遇到过用console搞不定的。有时候需要用匿名函数先把变量放到另一个副本里,否则变量的值不是当时的值。
qq286735628
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
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
2012-07-12 11:50:17 +08:00
@qq286735628 data貌似没定义哦。另外你直接跨域拿json不用jsonp么?
bitsmix
2012-07-12 11:51:42 +08:00
$.get(url, function(data) {
console.log(data);
});

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

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

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

@cute thanks。我去研究下

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

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

参考:http://bugs.jquery.com/ticket/7694#comment:1
bitsmix
2012-07-12 13:10:34 +08:00
@qq286735628 try before ask.
qq286735628
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);
}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/42153

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX