2010-10-31 158 views
0

假设所有形式的应用程序具有这样的结构:AJAX(jQuery的)响应

<div id="result_messages"></div> 
<form action="/action"> 
<!-- all the form --> 
</form> 

用于这种形式提交按钮看起来是这样的:

<input type="button" onclick="$.post('/action', $(form).serialize(), function (data) { 
    $('#result_messages').html(data);  // At this point the 'data' is an standard HTML with a message 
});" /> 

可是,却并不总是响应消息......当数据信息或不如何检测??????:

<input type="button" onclick="$.post('/action', $(form).serialize(), function (data) { 
    if (isMessage(data)) 
     $('#result_messages').html(data);  
    else 
     doActionWith(data); 
});" /> 

使用JSON可能的解决方案:

{ response_type : 'message', data: 'all_data_here' } 

{ response_type : 'nomessage', data: 'all_data_here' } 

其他的解决办法是把一个特殊的字符串在开始的数据:

<!--message--><ul><li>form was processed</li></ul> 

你有没有其他的想法?你对这个解决方案有什么看法?

+1

你是什么意思«不总是消息»?那是什么,其他时间呢? – 2010-10-31 09:31:08

回答

0

有什么选择,除了简单的html输出? JSON?

如果是这样,您可以发回一个对象并在回调中检查它。

2

您对这个解决方案有什么看法?

<input type="button" onclick="$.post("/action", $(form).serialize(), function (data) {

  1. 这将翻倒。 /action之前的报价将终止onclick属性值
  2. 内联JS是讨厌的。将您的事件处理程序与外部脚本绑定。
  3. 如果JS不可用,这将不起作用。编写一个可以工作的表单(使用常规的提交按钮),然后用JS逐步增强。
  4. form是未定义的,应该是this.form
  5. /action重复你自己。写更多的可重用代码:this.form.action

使用JSON可能的解决方案

是。使用结构化的数据格式而不是一堆代码推入页面。

+0

这个问题的所有代码都完全是说明性的......这有助于你理解问题 – 2010-10-31 09:40:03