RJS使得我们可以很容易的实现AJAX效果,但是bug还是会发生。
在这一节,我们展示如何在客户端和服务器端调试RJS错误。
上一节中,我们演示了让用户可以通过AJAX添加reviews,但是这个功能现在坏掉了,当用户点添加评论的按钮的时候,什么也没有发生,也就是说AJAX出错了,但是错在哪里呢?看不出来,没有任何线索,AJAX的错误比普通的错误更难以找到问题根源。是我们的请求根本没有送到服务器端,还是服务器端处理的时候还是返回的时候出错了?这种bug很难追踪,因为浏览器并不提示任何错误信息,所以我们不知道从哪一行代码开始查找错误。
跟踪调用
首先,我们应该去看看页面的源代码,注意<head>部分,看看是否引用了需要的javascript文件。如果这部分没问题,接下来我们就要去看看form tag那一部分了。看看form提交的时候,触发的AJAX请求是否正确。如果判断是否正确呢,例如如下的页面源代码:
我们要检查一下AJAX请求是否触发了,还有网址对不对,经过检查,onsubmit属性的创建了一个AJAX请求,并且网址也是对的。
既然浏览器的网页的源代码没有错误,那么错误就出在服务器端了,首先我们要去看看development.log,看看服务器端是否收到了AJAX请求。如何去看呢,我们运行
命令,然后重新提交一次AJAX请求,我们在log里面看到如下内容:
仔细分析这些内容,我们看到正确的action create被调用了,review也的确被添加到了数据库中,然后create.rjs文件被render,并发生了错误,错误原因是pluralized没有定义,再去看看我们create.rjs代码,发现我们用错了方法,应该是pluralize方法。
这是一个很傻瓜式的bug,但是他说揭示的RJS调试流程却是很经典的,每次AJAX问题都可以按照这个流程去调试。(当然其他错误也可以去查看页面源代码,和服务器端的development.log(用tail方法显示该文件的结尾,就不用看到很多没用的内容了。))
2. 客户端(浏览器端)的错误
有时候服务器端是正确的,但是AJAX还是失败了,也就是问题出在客户端解析服务器端返回的javascript上。这就需要一个好的javascript debugger。 Firebug跟firefox的合作无疑是一个很好的javascript调试器。firebug可以从firebug的网站安装,跟安全firefox的其他扩展没有区别。一旦安装成功,就可以使用firebug调试html, css, javascript, 还有AJAX请求。
只要点击浏览器状态条上的bug图标,就可以激活firebug了。默认的,对当前网站firebug是禁用的,要启用它,我们需要check Console菜单下面的三个checkbox。一旦启用了,我们就可以添加一条新的评论,然后来看看firebox的console输出了什么。
控制台显示,AJAX请求的确提交了,而且返回的“200 OK 118ms”,是成功的。如果失败的话,最上面一行会是红色,而且会返回的是“500 status”。下面有三个tab,分布是header, 发送的请求的header,
body, 发送的请求的body content,我们可以看到发送的form的内容。
response,里面是我们的RJS模板生成的javascript代码。
浏览器将会执行这些javascript代码来更新当前页面。能够看到这写返回的javascript给我们的调试带来了极大的便利,以前,我们只能通过alert来看我们想看到的东西.
但是alert还是有他自己的用处的,
如果服务器返回的javascript抛出一个错误,try...catch可以捕捉这个错误,然后alert一个消息框出来。他会将当前的错误提示,和产生错误的javascript代码段都alert出来。
希望本节的内容能帮你应付大部分的AJAX debug。
在这一节,我们展示如何在客户端和服务器端调试RJS错误。
上一节中,我们演示了让用户可以通过AJAX添加reviews,但是这个功能现在坏掉了,当用户点添加评论的按钮的时候,什么也没有发生,也就是说AJAX出错了,但是错在哪里呢?看不出来,没有任何线索,AJAX的错误比普通的错误更难以找到问题根源。是我们的请求根本没有送到服务器端,还是服务器端处理的时候还是返回的时候出错了?这种bug很难追踪,因为浏览器并不提示任何错误信息,所以我们不知道从哪一行代码开始查找错误。
跟踪调用
首先,我们应该去看看页面的源代码,注意<head>部分,看看是否引用了需要的javascript文件。如果这部分没问题,接下来我们就要去看看form tag那一部分了。看看form提交的时候,触发的AJAX请求是否正确。如果判断是否正确呢,例如如下的页面源代码:
<form action="/products/1/reviews" class="new_review" id="new_review" method="post" onsubmit="new Ajax.Request('/products/1/reviews', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;">
我们要检查一下AJAX请求是否触发了,还有网址对不对,经过检查,onsubmit属性的创建了一个AJAX请求,并且网址也是对的。
既然浏览器的网页的源代码没有错误,那么错误就出在服务器端了,首先我们要去看看development.log,看看服务器端是否收到了AJAX请求。如何去看呢,我们运行
tail development.log
命令,然后重新提交一次AJAX请求,我们在log里面看到如下内容:
Processing ReviewsController#create (for 127.0.0.1 at 2009-03-19 21:17:50) [POST] Parameters: {"commit"=>"Add comment", "review"=>{"name"=>"Bob", "content"=>"Wow!"}, "product_id"=>"1", "authenticity_token"=>"4cncFdRcYuinYVNWj3uGZTPuvx4VXM7gBCRCMOLt4fw=", "_"=>""} Review Create (0.4ms) INSERT INTO "reviews" ("name", "updated_at", "product_id", "content", "created_at") VALUES('Bob', '2009-03-19 21:17:50', 1, 'Wow!', '2009-03-19 21:17:50') Rendering reviews/create Rendered reviews/_review (1.3ms) Product Load (0.3ms) SELECT * FROM "products" WHERE ("products"."id" = 1) SQL (0.2ms) SELECT count(*) AS count_all FROM "reviews" WHERE ("reviews".product_id = 1) ActionView::TemplateError (undefined method `pluralized' for #<ActionView::Base:0x221b66c>) on line #2 of app/views/reviews/create.rjs: 1: page.insert_html :bottom, :reviews, :partial => 'review', :object => @review 2: page.replace_html :reviews_count, pluralized(@review.product.reviews.size, 'Review') 3: page[:new_review].reset 4: page.replace_html :notice, flash[:notice] 5: flash.discard
仔细分析这些内容,我们看到正确的action create被调用了,review也的确被添加到了数据库中,然后create.rjs文件被render,并发生了错误,错误原因是pluralized没有定义,再去看看我们create.rjs代码,发现我们用错了方法,应该是pluralize方法。
这是一个很傻瓜式的bug,但是他说揭示的RJS调试流程却是很经典的,每次AJAX问题都可以按照这个流程去调试。(当然其他错误也可以去查看页面源代码,和服务器端的development.log(用tail方法显示该文件的结尾,就不用看到很多没用的内容了。))
2. 客户端(浏览器端)的错误
有时候服务器端是正确的,但是AJAX还是失败了,也就是问题出在客户端解析服务器端返回的javascript上。这就需要一个好的javascript debugger。 Firebug跟firefox的合作无疑是一个很好的javascript调试器。firebug可以从firebug的网站安装,跟安全firefox的其他扩展没有区别。一旦安装成功,就可以使用firebug调试html, css, javascript, 还有AJAX请求。
只要点击浏览器状态条上的bug图标,就可以激活firebug了。默认的,对当前网站firebug是禁用的,要启用它,我们需要check Console菜单下面的三个checkbox。一旦启用了,我们就可以添加一条新的评论,然后来看看firebox的console输出了什么。
控制台显示,AJAX请求的确提交了,而且返回的“200 OK 118ms”,是成功的。如果失败的话,最上面一行会是红色,而且会返回的是“500 status”。下面有三个tab,分布是header, 发送的请求的header,
body, 发送的请求的body content,我们可以看到发送的form的内容。
response,里面是我们的RJS模板生成的javascript代码。
浏览器将会执行这些javascript代码来更新当前页面。能够看到这写返回的javascript给我们的调试带来了极大的便利,以前,我们只能通过alert来看我们想看到的东西.
但是alert还是有他自己的用处的,
如果服务器返回的javascript抛出一个错误,try...catch可以捕捉这个错误,然后alert一个消息框出来。他会将当前的错误提示,和产生错误的javascript代码段都alert出来。
希望本节的内容能帮你应付大部分的AJAX debug。
发表评论
-
12.3.3 scaling issue of the status feed
2011-10-30 17:54 834the problem of the implementati ... -
12.3 the status feed
2011-10-30 15:34 8711. we need to get all the micro ... -
12.2 a working follow button with Ajax
2011-10-29 18:10 9231. in the last chapter, in the ... -
12.2 a web interface for following and followers.
2011-10-28 22:14 8941.before we do the UI, we need ... -
12. following user, 12.1 relationship model
2011-10-18 14:29 7651. we need to use a relationshi ... -
11.3 manipulating microposts.
2011-10-17 15:31 9141. since all micropost actions ... -
11.2 show microposts.
2011-10-17 12:01 7151. add test to test the new use ... -
11.1 user micropost -- a micropost model.
2011-10-17 10:43 11211. we will first generate a mic ... -
10.4 destroying users.
2011-10-16 15:47 759in this chapter, we will add de ... -
10.3 showing users list
2011-10-15 20:41 787in this chapter, we will do use ... -
10.2 protect pages.
2011-10-15 15:11 679again, we will start from TD ... -
10.1 updating users.
2011-10-14 18:30 7231. git checkout -b updating-use ... -
9.4 sign out
2011-10-13 15:21 748whew!!!, last chapter is a long ... -
9.3 sign in success.
2011-10-12 15:39 7631. we will first finish the cre ... -
9.1 about flash.now[:error] vs flash[:error]
2011-10-12 15:37 744There’s a subtle difference ... -
9.2 sign in failure
2011-10-12 12:19 672start from TDD!!! 1. requir ... -
9.1 sessions
2011-10-12 10:00 657a session is a semi-permanent c ... -
what test framework should you use?
2011-10-11 16:56 0for integration test, i have no ... -
what test framework should you use?
2011-10-11 16:56 0<p>for integration test, ... -
8.4 rspec integration tests
2011-10-11 16:53 737in integration test, you can te ...
相关推荐
Debugging Tools for Windows 是一套强大的开发和调试工具,主要用于对Windows操作系统进行深入的故障排查和性能分析。这个工具集包含了多种实用程序,如WinDbg、KD、CDB、NTSD等,它们都是针对不同场景的专业调试器...
Advanced Apple Debugging & Reverse Engineering, Second Edition ISBN: Learn the powerful secrets of Apple’s software debugger, LLDB, that can get more information out of any program than you ever ...
【标题】:Debugging Tools for Windows.zip 【描述】:这个压缩包文件“Debugging Tools for Windows.zip”包含了用于Windows环境下的调试工具,特别针对Qt Creator的调试器配置问题。通常,当Qt Creator的调试器...
### H3C交换机Debugging命令入门使用介绍 #### 一、概述 H3C交换机作为网络设备的重要组成部分,在日常运维与故障排查过程中扮演着关键角色。通过使用H3C交换机的`debugging`命令,网络管理员可以获取详细的设备...
本书《Inside Windows Debugging》由Tarik Soulami撰写,得到了微软公司的授权,由O’Reilly Media, Inc.出版。该书结合最佳实践和常见的调试与编程技巧,很多技巧在其他书籍中尚未被记录下来。在本书的整个阅读过程...
Inside Windows Debugging - Practical Debugging and Tracing Strategies 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 ...
Advanced Apple Debugging & Reverse Engineering, Second Edition ISBN: Learn the powerful secrets of Apple’s software debugger, LLDB, that can get more information out of any program than you ever ...
Debugging Tools for Windows (x64)和Debugging Tools for Windows (x86) 微软Debugging Tools for Windows工具,简称windbg,查看dmp文件,调试驱动程序、应用程序等。
"泰凌微 Burning and Debugging Tool (BDT) 用户指南" 泰凌微 Burning and Debugging Tool (BDT) 用户指南是泰凌微公司发布的一份关于 Burning and Debugging Tool (BDT) 的用户手册。该手册旨在帮助用户快速了解和...
根据提供的信息,我们可以总结并详细解释与“debugging_with_gdb(中文版pdf)”相关的知识点。这份文档似乎是一份关于使用 GDB(GNU Debugger)进行调试的手册或指南的中文版 PDF 文件。GDB 是一个非常强大的开源调试...
Debugging Tools for Windows,是为WINDOWS设计的调试程序工具,能够查看软件指令栈等功能。
《Windows分析工具——Debugging Tools for Windows (x86)深度解析》 Windows操作系统在运行过程中,有时会遇到各种异常情况,导致系统错误或应用程序崩溃。为了有效地诊断和解决这些问题,微软提供了一套强大的...
Debugging With GDB 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
标题中的“Debugging tools for windows(x86 6.10.3.233)”指的是特定版本的Windows调试工具,适用于x86架构,并且版本号为6.10.3.233。这个工具集包含了多种调试器,如WinDbg、KD、CDB和NTSD,它们都是系统级调试的...
在IT领域,Debugging Tools for Windows(通常简称为WinDbg)是一款由微软提供的强大调试工具,用于诊断和解决Windows操作系统及其应用程序中的各种问题。它能够帮助开发者和系统管理员深入理解系统崩溃、性能瓶颈和...
Debugging Heap Corruption in Visual C++ Debugging Heap Corruption in Visual C++ 是一篇关于使用 Microsoft Debugging Tools for Windows 调试 Visual C++ 堆腐败的文章。堆腐败是指在堆中分配的内存被意外地...
目前CSDN下载频道中的微软调试工具WinDbg(即Debugging Tools for Windows)大都不适用于Win10系统,在Windows10中会报错:Could not find the xxx\MEMORY.DMP Dump File,Win32 error On87。这里提供的WinDbg10下载...
Advanced Apple Debugging & Reverse Engineering, Second Edition ISBN: Learn the powerful secrets of Apple's software debugger, LLDB, that can get more information out of any program than you ever ...
Advanced+.NET+Debugging