Rails 的 AJAX

January 6, 2014

Rails 中只需要指定在 erb 模板中指定 remote=true 选项就可以将请求变为异步的了。request-handle-response-callback 这是一个 AJAX 请求的过程。rails 将这些步骤直接简化成了 requesthandle 两步,让它看起来的像魔法一样而简洁神秘。在我初次接触 RailsAJAX 时,我也随手去翻了下 wikipedia 关于 AJAX 的条目。AJAX 很好理解,但这并未让我更好的去完全理解 Rails 魔法般的 *AJAX*。主要被困惑的在 controllerhandle 函数里面的 response 实现。

	    def handle
        @model = new some_model
			  
        #do something
        
				if @model.save
            respond_to do |format|
                format.js
            end
        end  

上面是一个典型的 Rails 应用场景,完全没有了那些简单粗暴原生的 htmljavascript 的代码,更加别想看到 XMLHttpRequest 这种对象了。respond_to 是一个接收代码块的方法。而 format 表示 response 时使用的数据格式,format.js 会找到对应的 handle.js 并将里面的 js 代码 repond 到客户端。这仅仅只是客户端需要 js 类型回复的一个需求。如果客户端需要 json,XML,HTML 等不同类型的数据,只需要在 repondto 这个代码块使用 format 对象调用对应的方法即可。rails 会自动判断并回应对应的类型的数据到前台页面。 这样做的好处有: 1.DRY 原则,不需要根据不同请求类型去定义对应的 response 方法。 2.避免因为 requestresponse 的数据类型不同而产生错误。