2010-09-06 49 views
0

我有一個模式對話框(通過jQuery UI完成),將窗體提交給遠程控制器Action。jquery ajax調用:如何解析結果?

這就是所謂的jQuery函數:

$("fpForm").submit(function() { 
    $.ajax({ 
     type: "POST", 
     url: "ForgotPassword", 
     data: $("#fpForm").serialize(), 
     success: function(response) { 
      alert(response); 
     }, 
     error: function(response) { 
      alert(response); 
     } 
    }); 
}); 

行動確實對一些數據驗證,然後發回一個JSON格式的響應。比方說,例如,這是一個示例響應:

{"result":"NOK","message":"The user is not registered on the system"} 

我的問題是:

  1. 爲什麼我在「成功」和「錯誤」塊已設置調試警報不被執行?
  2. 如何編寫我的代碼來解析響應,同時保持在對話框中等待它?
  3. 如何在ajax調用期間編寫代碼來阻止表單元素?

如果對於大多數人來說這個問題看起來很愚蠢,但我對ajax完全陌生,我正在嘗試學習一些我知道的有經驗的模式。

謝謝您的回覆

+1

http://stackoverflow.com/questions/1637334/iterating-through-parsing-json-object-via-javascript發佈在stackoverflow上的很多問題,這裏會給你一些指導 – 2010-09-06 20:49:43

回答

1

第一個錯誤是使用$("fpForm").submit而不是$("#fpForm").submit

如果服務器返回JSON數據(例如JsonResult),則應該包含dataType: "json"以將結果轉換爲對象中的對象。在此之後可以更換alert(response);

alert('Result: ' + response.result + ', Message: ' + response.message); 

要阻止表單元素,我會建議你使用jQuery BlockUI Plugin。在demos你會發現不同的使用例子,並找到你喜歡的方式。

+0

呃......你對第一個錯誤是正確的,但表單也被提交了!無論如何,謝謝你的回答! – Lorenzo 2010-09-06 21:28:07

+0

我已經包含了你的建議,但第一個錯誤仍然存​​在。我還在呼叫中添加了「同步:真」選項,但我被重定向到僅包含json響應的另一個屏幕! – Lorenzo 2010-09-06 21:42:35

+0

我認爲如果需要的話,你不需要使用'sync:true'。你的程序也應該沒有'sync:true'。它現在還沒有工作,錯誤不是固定的。 「第一個錯誤」是什麼意思?將數據發送到服務器?將數據以代碼或工作標準格式「提交」發送?你可以在'$ .ajax'調用之前插入'alert(「之前的$ .ajax」);''。您可以使用Fiddler(請參閱http://www.fiddler2.com/fiddler2/)或Firebug驗證數據是否真正發送和接收。 – Oleg 2010-09-06 21:57:17

1

我的問題是:

  1. 爲什麼「錯誤」塊 不被得到執行,我在「成功」,並設置調試警報?
  2. 我該如何編寫我的代碼來解析響應,同時在對話框中繼續等待 ?
  3. 如何在ajax 調用期間編寫代碼以阻止表單元素?
  1. 如果你的意思是使用ID那麼你錯過了代號:

    $( 「#fpForm」)

  2. 添加sync : true選項上電話?

  3. 你既可以:設置在窗體部件的禁用屬性 AFTER張貼請求,或者與一個元件(可能半透明)屏蔽頁面轉移的輸入。

+0

非常感謝你!我已經包括你的建議但第一個錯誤仍然存​​在。我還在呼叫中添加了「同步:真」選項,但我被重定向到僅包含json響應的另一個屏幕! – Lorenzo 2010-09-06 21:43:11