2011-04-16 42 views
0

我一直试图让这个工作3个小时。即时通讯做一个jQuery的职位,但一些在线我做错了什么,但我没有得到什么。jquery post是否是ajaxrequest?

在我的方法我检查它是否ajaxrequest,如果它是我返回一个字符串消息基于结果。

[HttpPost] 
    public ActionResult PostJquery(ContactViewModel viewModel) 
    { 
     if (Request.IsAjaxRequest()) 
     { 
      if (!string.IsNullOrEmpty(viewModel.Email)) 
      { 
       return Content("success"); 
      } 
      else 
      { 
       return Content("Fail"); 
      } 
     } 
     else 
     { 
      return RedirectToAction("About"); 
     } 
    } 

我的jQuery和html看起来像这样。

<% using (Html.BeginForm()) 
    {%> 
<%: Html.TextBoxFor(model => model.Email) %> 
<br /> 
<br /> 
<%: Html.TextBoxFor(model => model.Title) %><br /> 
<input type="submit" value="Save" id="button" /> 
<%} %> 


<script src="<%= Url.Content("~/Scripts/jquery-1.5.2.js") %>" type="text/javascript"></script> 

<script type="text/javascript"> 
    $(document).ready(function() {    
     $('#button').click(function (e) { 
          $.post('/Home/PostJquery', { viewModel: $('form').serialize() }, function (data) { alert(data); });     
     }); 
    }); 

</script> 

它的作用是进入的方法和重定向到该网站有关,因为它不是一个ajaxrequest,如果我删除它,它会返回成功,但它带我到一个空白页与文本的成功writen。它不会在alert中触发成功。我可能做错了什么?我应该使用.post还是.ajax?

感谢乡亲输入

回答

3

您需要取消按钮,这是返回false提交表单的默认操作:

$(function() {    
    $('#button').click(function() { 
     $.post('/Home/PostJquery', $('form').serialize(), function (data) { 
      alert(data); 
     }); 
     return false; 
    }); 
}); 

还要注意参数的传递方式。 0123'方法已经准备好请求,所以这就是你应该发送的第二个参数。

,但更好的办法来AJAXify一种形式是认购.submit()事件这种形式:

$(function() {    
    $('form').submit(function() { 
     $.post(this.action, $(this).serialize(), function (data) { 
      alert(data); 
     }); 
     return false; 
    }); 
}); 

甚至更​​好的办法是使用将您的代码到jquery form plugin

$(function() {    
    $('form').ajaxForm(function(data) { 
     alert(data); 
    }); 
}); 

备注:确保在从AJAX请求返回时,在服务器上设置正确的内容类型。

+0

谢谢你,我尝试过函数(e),e.preventDefault();没有运气。我总是错过了文档中的返回错误。你拯救了我的一天Darin。 – 2011-04-16 17:24:10

+0

您是如何指定正确的内容类型的?你能给我一个快速的例子吗? – 2011-04-16 17:26:24

+1

@ Dejan.S,像这样:'return Content(“success”,“text/plain”);'或者如果您使用的是Json:'return Json(new {success = true}); – 2011-04-16 17:39:21