Jquery使用Firefox FireBug插件调试Ajax步骤讲解


Posted in Javascript onDecember 02, 2013

首先,我们用一个示例来说明JQuery的Ajax调用过程,

实现的一个功能是:点击确认支付按钮之后,实现余额支付的功能:

1.首先在php页面将相关需要调用的函数绑定到按钮上:

<input type="submit" name="pay_btn" id="pay_btn" value="确认支付" />
<script type="text/javascript">
$(function(){
    $("#pay_btn").bind("click",ABC.balancePay);
});

2.脚本处:

如果使用$.post方式实现:

var ABC = {
    balancePay: function(event){
        event.preventDefault();
        var tthis = $(event.currentTarget);
        var form = tthis.parents(‘form');
        var url = form.attr(‘action');
        var data = ‘code=15′ ;//+ $(‘#verifyCode').val();
        var jqXhr = $.post(url, data, undefined, ‘jsonp');
        jqXhr.done(function(datas){
                //console.log(‘这里是通过console打印出来的'); //#4
                $("#msg").text(‘结果:'+data);
});
}

$.post方式也可以直接指定回调函数:

var jqXhr = $.post(url, data, function(data){
            $("#msg").text('结果:'+data);
}, 'jsonp');

使用$.ajax方法实现:

var jqXhr = $.post(url, data, function(data){
            $("#msg").text(‘结果:'+data);
}, ‘jsonp');

使用$.ajax方法实现:

var jqXhr = $.ajax({
            type: ‘post',
            url: url,
            data: {code: ‘15′},
            dataType: ‘jsonp',
            sccuess:function(data){
            alert(‘good');},
            error: function(XMLHttpRequest, textStatus, errorThrown) {  //#3这个error函数调试时非常有用,如果解析不正确,将会弹出错误框
                        alert(XMLHttpRequest.status);
                        alert(XMLHttpRequest.readyState);
                        alert(textStatus); // paser error;
                    },
});

3.服务器端:

public function actionInterPayProc($callback)
{
//header("content-type: text/javascript");
//header(‘Content-type: text/html; charset=utf-8′);
         $code = $_POST['code'];
        //$code  //#1 此处给出一个有语法错误的表达式
        //echo $code;  //#2  此处标记,用于后面调试说明;
        …
        $result = 1;
            //echo $_POST['callback']. ‘(‘ . json_encode($result) . ‘);';//注意使用的编码方式需要和客户端请求保持一致;
exit(0);
}

调试工具

Firefox有强大FireBug 插件,现在比较新的浏览器如 Chrome 和 Safari,以及 IE 8都内置了调试工具,借助于这些调试工具,可以非常详细的查看 Ajax 的执行过程(chrome和firefox中调出调试工具的快捷键是ctrl+shift+c);
以下使用FireBug;

1.使用firebug,查看回调:

对于Ajax方法,是通过异步执行的服务器端程序,如果服务器端出错,在页面上不会显示的,我们需要借助调试工具来查看;例如,将以上示例中#2的注释去掉,触发ajax请求一次,可以在控制台面板中查看到错误的返回结果:

 

如果是服务器端程序出错,也可以直接看到,出错原因跟一般普通的页面一样,只不过是在ajax返回的面板中查看(web浏览器页面中不会有任何显示)。
这里需要说明的是,如果在服务器端使用了echo等方法将需要查看的变量打印出来了,那么,ajax调用的结果一定是失败的,因为这样看上去的回调函数名称被更改了,造成无法解析;

例如,打印的变量是333,那么最后回调的结果是:333ajaxcallbak(1);客户端寻找333ajaxcallbak这个函数名,无法解析。

2.使用error函数打印错误信息:

$.ajax()有一个error参数,可以指定一个函数,在请求失败时,将调用此方法。这里给出的信息,对于调试来说,非常有用;

error:function (XMLHttpRequest, textStatus, errorThrown)

error事件返回的第一个参数XMLHttpRequest有一些有用的信息:

XMLHttpRequest.readyState:

其返回的状态码对应了一种错误说明:

状态码

0 -(未初始化)还没有调用send()方法

1 -(载入)已调用send()方法,正在发送请求

2 -(载入完成)send()方法执行完成,已经接收到全部响应内容

3 -(交互)正在解析响应内容

4 -(完成)响应内容解析完成,可以在客户端调用了

XMLHttpRequest.status:

这里返回的状态码就是我们日常见到的HTTP状态;比如404,表示没有找到页面;

textStatus:

"timeout", "error", "notmodified" 和 "parsererror"。

(默 认: 自动判断 (xml 或 html)) 请求失败时调用时间。参数有以下三个:XMLHttpRequest 对象、错误信息、(可选)捕获的错误对象。如果发生了错误,错误信息(第二个参数)除了得到null之外,还可能是"timeout", "error", "notmodified" 和 "parsererror"。

通过这个error函数,程序出错就很容易排查;

比如上面的#2处,去掉注释,相当于更改了回调函数名;在erro里就会报:parsererror;

3.使用console.log打印输出:(alert()也可以)

这只是一个增强调试体验的辅助方法。对于js中的关注变量跟踪,我们可通过alert()方法打印出来,不过弹出框频繁会让人烦躁。console.log是一个替代方式,它是firebug插件的一个方法。console.log打印出来的变量结果会显示在firebug的控制台面板中;

可能的出错原因:

1.如果返回的结果格式不正确,在firebug中能看到结果;

2.对于JSON请求,对格式比较严格:

如果通过error函数打出来的报错是:parsererror

可能的原因是服务器端脚本编码的问题;可以在服务端处理函数内处理的第一行加上对应的header信息:

eg:header('Content-type: text/html; charset=utf-8');

当然,最有可能的是格式不正确:

echo "{'re':'success'}";jquery不能解析
echo "{\"re\":\"success\"}";就没有错误

不要输出怪异的json格式的字符串,要不jq1.4+版本不会执行success回调。如{abc:1}或者{'abc':1},要输出

{"abc":1}
{'success':true}改为{"success":true}

 

Javascript 相关文章推荐
jQuery dialog 异步调用ashx,webservice数据的代码
Aug 03 Javascript
TimergliderJS 一个基于jQuery的时间轴插件
Dec 07 Javascript
cookie.js 加载顺序问题怎么才有效
Jul 31 Javascript
javascript使用正则获取url上的某个参数
Sep 04 Javascript
浅谈JS闭包中的循环绑定处理程序
Nov 09 Javascript
jQuery使用load()方法载入另外一个网页文件内的指定标签内容到div标签的方法
Mar 25 Javascript
js简单实现点击左右运动的方法
Apr 10 Javascript
jQuery实现圣诞节礼物动画案例解析
Dec 25 Javascript
js清除浏览器缓存的几种方法
Mar 15 Javascript
JavaScript验证知识整理
Mar 24 Javascript
JS简单实现点击跳转登陆邮箱功能的方法
Oct 31 Javascript
jquery实现烟花效果(面向对象)
Mar 10 jQuery
jquery遍历之parent()和parents()的区别及parentsUntil()方法详解
Dec 02 #Javascript
jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别
Dec 02 #Javascript
javascript中对Attr(dom中属性)的操作示例讲解
Dec 02 #Javascript
浅析jquery的作用与优势
Dec 02 #Javascript
jquery获取css中的选择器(实例讲解)
Dec 02 #Javascript
jquery中的查找parents与closest方法之间的区别
Dec 02 #Javascript
jquery中的过滤操作详细解析
Dec 02 #Javascript
You might like
php下统计用户在线时间的一种尝试
2010/08/26 PHP
比较简单实用的PHP无限分类源码分享(思路不错)
2011/10/13 PHP
php查询mysql大量数据造成内存不足的解决方法
2015/03/04 PHP
Symfony2学习笔记之系统路由详解
2016/03/17 PHP
PHP经典实用正则表达式小结
2017/05/04 PHP
Laravel如何创建服务器提供者实例代码
2019/04/15 PHP
jQuery EasyUI API 中文文档 - Parser 解析器
2011/09/29 Javascript
jquery 卷帘效果实现代码(不同方向)
2013/02/05 Javascript
jquery插件开发之实现google+圈子选择功能
2014/03/10 Javascript
node.js中使用q.js实现api的promise化
2014/09/17 Javascript
使用js实现的简单拖拽效果
2015/03/18 Javascript
JS实现DIV容器赋值的方法
2015/12/14 Javascript
javascript实现图片左右滚动效果【可自动滚动,有左右按钮】
2016/09/19 Javascript
JavaScript仿微信(电话)联系人列表滑动字母索引实例讲解(推荐)
2017/08/16 Javascript
Vue动态组件实例解析
2017/08/20 Javascript
[js高手之路]原型式继承与寄生式继承详解
2017/08/28 Javascript
Angular 4.0学习教程之架构详解
2017/09/12 Javascript
关于Vue在ie10下空白页的debug小结
2018/05/02 Javascript
解决vue组件props传值对象获取不到的问题
2019/06/06 Javascript
在Node.js中将SVG图像转换为PNG,JPEG,TIFF,WEBP和HEIF格式的方法
2019/08/22 Javascript
jQuery 图片查看器插件 Viewer.js用法简单示例
2020/04/04 jQuery
javascript实现放大镜功能
2020/12/09 Javascript
[01:14:19]NAVI vs Mineski 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
Python中的模块导入和读取键盘输入的方法
2015/10/16 Python
Python 的字典(Dict)是如何存储的
2019/07/05 Python
使用coverage统计python web项目代码覆盖率的方法详解
2019/08/05 Python
python 自定义异常和主动抛出异常(raise)的操作
2020/12/11 Python
美国娱乐和流行文化商品店:FYE
2017/09/14 全球购物
联想智利官方网站:Lenovo Chile
2020/06/03 全球购物
营销与策划个人求职信
2013/09/22 职场文书
2014年有孩子的离婚协议书范本
2014/10/08 职场文书
2014年学校体育工作总结
2014/12/08 职场文书
课外活动实习计划
2015/01/19 职场文书
小学运动会入场口号
2015/12/24 职场文书
准备去美国留学,那么大学申请文书应该怎么写?
2019/08/12 职场文书
GO中sync包自由控制并发示例详解
2022/08/05 Golang