`
peryt
  • 浏览: 56384 次
  • 来自: ...
最近访客 更多访客>>
社区版块
存档分类
最新评论
  • waiting: 既然都指定了dataType为'script'那就不必特别在b ...
    jQuery

Debugging RJS

阅读更多
RJS使得我们可以很容易的实现AJAX效果,但是bug还是会发生。
在这一节,我们展示如何在客户端和服务器端调试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。











分享到:
评论

相关推荐

    DebuggingTools

    Debugging Tools for Windows 是一套强大的开发和调试工具,主要用于对Windows操作系统进行深入的故障排查和性能分析。这个工具集包含了多种实用程序,如WinDbg、KD、CDB、NTSD等,它们都是针对不同场景的专业调试器...

    Advanced.Apple.Debugging.&.Reverse.Engineering.v2.0 Code Part2

    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 【描述】:这个压缩包文件“Debugging Tools for Windows.zip”包含了用于Windows环境下的调试工具,特别针对Qt Creator的调试器配置问题。通常,当Qt Creator的调试器...

    H3C交换机debugging命令入门使用介绍

    ### H3C交换机Debugging命令入门使用介绍 #### 一、概述 H3C交换机作为网络设备的重要组成部分,在日常运维与故障排查过程中扮演着关键角色。通过使用H3C交换机的`debugging`命令,网络管理员可以获取详细的设备...

    Inside Windows Debugging.pdf

    本书《Inside Windows Debugging》由Tarik Soulami撰写,得到了微软公司的授权,由O’Reilly Media, Inc.出版。该书结合最佳实践和常见的调试与编程技巧,很多技巧在其他书籍中尚未被记录下来。在本书的整个阅读过程...

    Inside Windows Debugging - Practical Debugging and Tracing Strategies 无水印pdf

    Inside Windows Debugging - Practical Debugging and Tracing Strategies 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 ...

    Advanced Apple Debugging & Reverse Engineering Code part1

    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(X86+X64)

    Debugging Tools for Windows (x64)和Debugging Tools for Windows (x86) 微软Debugging Tools for Windows工具,简称windbg,查看dmp文件,调试驱动程序、应用程序等。

    AN-18101200-E2_Telink Burning and Debugging Tool (BDT) .pdf

    "泰凌微 Burning and Debugging Tool (BDT) 用户指南" 泰凌微 Burning and Debugging Tool (BDT) 用户指南是泰凌微公司发布的一份关于 Burning and Debugging Tool (BDT) 的用户手册。该手册旨在帮助用户快速了解和...

    debugging_with_gdb(中文版pdf)

    根据提供的信息,我们可以总结并详细解释与“debugging_with_gdb(中文版pdf)”相关的知识点。这份文档似乎是一份关于使用 GDB(GNU Debugger)进行调试的手册或指南的中文版 PDF 文件。GDB 是一个非常强大的开源调试...

    Debugging Tools for Windows

    Debugging Tools for Windows,是为WINDOWS设计的调试程序工具,能够查看软件指令栈等功能。

    Debugging Tools for Windows (x86)windows分析工具

    《Windows分析工具——Debugging Tools for Windows (x86)深度解析》 Windows操作系统在运行过程中,有时会遇到各种异常情况,导致系统错误或应用程序崩溃。为了有效地诊断和解决这些问题,微软提供了一套强大的...

    Debugging With GDB 无水印pdf

    Debugging With GDB 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Debugging tools for windows

    标题中的“Debugging tools for windows(x86 6.10.3.233)”指的是特定版本的Windows调试工具,适用于x86架构,并且版本号为6.10.3.233。这个工具集包含了多种调试器,如WinDbg、KD、CDB和NTSD,它们都是系统级调试的...

    如何使用Debugging Tools for Windows (windebug)简单的使用心得

    在IT领域,Debugging Tools for Windows(通常简称为WinDbg)是一款由微软提供的强大调试工具,用于诊断和解决Windows操作系统及其应用程序中的各种问题。它能够帮助开发者和系统管理员深入理解系统崩溃、性能瓶颈和...

    Debugging Heap Corruption in Visual C++

    Debugging Heap Corruption in Visual C++ Debugging Heap Corruption in Visual C++ 是一篇关于使用 Microsoft Debugging Tools for Windows 调试 Visual C++ 堆腐败的文章。堆腐败是指在堆中分配的内存被意外地...

    真正Win10中可用的windbg10(Debugging Tools for Windows 10)

    目前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

    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

    Advanced+.NET+Debugging

Global site tag (gtag.js) - Google Analytics