2010-06-09 70 views
2

我試圖使用jQuery JavaScript中執行我的控制器......是執行我的jquery代碼..問題中使用JSON jQuery和MVC

<script type="text/javascript"> 
$('form').submit(function (e) { 
    e.preventDefault(); 
    $.ajax({ 
    type: "POST", 
    url: $(this).attr("action"), 
    data: $(this).serialize(), 
    contentType: "application/json;charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
    var obj = msg.deserialize(); 
    alert(msg); 
    } 
    }); 
}); 
</script> 

現在它確實執行我的動作..

這裏是我的控制器類是執行樣本..

[AcceptVerbs(HttpVerbs.Post)] 
    [Url("Account/LogOn")] 
    public virtual ActionResult LogOn(string Username, string Password) 
    { 
     if (Username == "test") 
     { 
      return Json(new { Success = true }); 
     } 
     else 
     { 
      return Json(new { Success = false }); 
     } 
    } 


問題是...當我運行的方法..它只是嘗試下載一個包含結果的「登錄」文件..我如何把它放回到jquery中的對象,所以我可以正確處理它,我嘗試添加成功標記並嘗試檢查味精,但它甚至不運行它

+0

嘗試添加功能爲「錯誤」或「完整」的回調而不是「成功」,這樣就可以看到正在發生的實際的錯誤,如果有的話。 – 2010-06-09 14:31:52

+0

'msg.deserialize()'對我來說看起來像一個隱藏的功能。 – jAndy 2010-06-09 14:33:04

+0

你的意思是提示你下載一個「文件」,如果你保存它,然後看看內容,該文件有正確的JSON?問題在於你的javascripts提示用戶下載JSON而不是在幕後處理它? – Nate 2010-06-09 14:35:16

回答

2

試圖註冊任何事件處理程序的DOM可能尚未完成加載之前把你的腳本中document.ready

<script type="text/javascript"> 
    $(function() { 
     // ... copy - paste your script here 
    }); 
</script> 

而且不需要設置dataType,jQuery的知道它的內容 - 來自服務器的類型響應頭。另注:傳遞給成功處理味精對象已經是一個JSON對象:你不需要解析/反序列化:

<script type="text/javascript"> 
$(function() { 
    $('form').submit(function() { 
     $.ajax({ 
      type: 'POST', 
      url: $(this).attr('action'), 
      data: $(this).serialize(), 
      success: function(msg) { 
       alert(msg.Success); 
      } 
     }); 
     return false; 
    } 
}); 
</script> 

而且我會建議您的解決方案是使用jquery.form插件。由於它,你的js代碼看起來一樣容易:

<script type="text/javascript"> 
$(function() { 
    $('form').ajaxForm(function(msg) { 
     alert(msg.Success); 
    }); 
}); 
</script> 

非常整潔的東西。您不必擔心序列化/反序列化數據,阻止默認事件,它甚至可以處理file uploads

+0

我認爲指定dataType並不是一件壞事,即使在這種特定情況下,JQuery也可以從Content-Type頭中推斷出所需的類型。有一次,我很努力地調用了一個JSON Web服務的ajax調用,除非我指定dataType,否則即使我還指定Content-Type爲「application/json」,但響應似乎沒有正確反序列化。當然,我的web服務可能存在問題,儘管我認爲dataType有更多用處,例如在請求中設置Accept標頭。 – 2010-06-09 14:56:18

+0

對不起,我的評論並沒有涉及到這個問題......雖然我想問你...你有沒有用asp.net mvc使用Fluent nhibernate?如果是這樣,建議一個教程,這將是一個好的開始? – 2010-06-10 07:09:11

+0

只是爲了澄清,這裏的實際問題AFAIK(通過在文檔加載後添加jQuery綁定來解決)是表單正常提交。這將瀏覽器重定向到返回JSON結果的url,然後瀏覽器決定通過下載文件來處理它。 – Owen 2010-07-03 13:03:51

0

HIDDENHANCEMENT

var obj = msg.deserialize(); 

如果這不是一個笑話,你會如果你使用jQuery v.1.4.x你不需要有發現了一個隱藏的功能:)

手動解析JSON字符串。 使用的舊版本,嘗試

var obj = window.JSON.parse(msg); 
+0

heh實際上只是在猜測「反序列化」 – jaekie 2010-06-09 14:32:39