Flex+rails中render的问题

task_controller中的一个action如下:
[code="java"]
def create
@task = current_user.tasks.build(params[:task])
respond_to do |format|
if @task.save
format.html do
flash[:notice] = 'Task was successfully created.'
redirect_to(@task)
end
format.xml { render :xml => @task, :status => :created,
:location => @task }
else
format.html { render :action => "new" }
format.xml { render :xml => @task.errors,
:status => :unprocessable_entity }
end
end
end
[/code]

当 format.xml { render :xml => @task, :status => :created,
:location => @task } 执行后, flex前端就会报错,就是那个2032的错误

[RPC Fault FaultString="HTTP request error" faultCode="Server.Error.Request" faultDetail="Error:[IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032:Stream Error.URL: http://localhost:3000/bugs/update"].URL: http://localhost:3000/bugs/update"]

at mx.rpc::AbstractInvoker/http://www.adobe:com/2006/flex/mx/internal::faultHandler()
at mx.rpc::Responder/fault()
at mx.rpc::AsyncRequest/fault()
at flash.events::EventDispatcherdispatchEventFunction()
at.flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/redirectEvent()

我不理解rails中的format.xml { render :xml => @task, :status => :created,
:location => @task }是什么意思,:status,:location主要指什么?还有就是format.xml { render :xml => @task.errors,
:status => :unprocessable_entity }中的:unprocessable_entity是什么意思?

那你要回看HTTP status code的定義,暫不作解釋。

長話短說,flex不曉處理200 OK以外的回傳狀態,通通回Fault。只要你任何情況,傳回一個200 OK及一個XML,就可以免去fault的問題。

  1. 將 format.xml { render :xml => @task, :status => :created, :location => @task }

改成
format.xml { render :xml => @task }

  1. 將 format.xml { render :xml => @task.errors, :status => :unprocessable_entity }

改成
format.xml { render :xml => @task.errors }