抓住我的头。我正在尝试做一个简单的ajax表单帖子,我得到的响应是一个错误。但是,我的页面仍然显示我的JSON字符串作为响应。这是我的javascript块:
$(function () {
$('#searchForm').submit(function () {
var jqhxr = $.post({ url: this.action, type: this.method, data: $(this).serialize(), dataType: 'json' })
.done(function () { alert('success') })
.fail(function () { alert('fail') })
.always(function () { alert('complete') });
return false;
});
});
这是发布到ASP.NET MVC页面(虽然我不认为这是问题);路由是正确的,在调试器中被命中并返回正确的数据,但以防万一:
[HttpPost]
public JsonResult Search(SearchFormViewModel vm)
{
var products = _productRepo.Find(...);
return Json(products);
}
所以,会发生什么是表单是通过ajax提交的,因为它应该是,我得到'fail'警告框,但JSON字符串仍然显示,所以请求成功。有什么想法吗?
答案 0 :(得分:1)
这真的是黑暗中的刺,但我想知道这是否会做你想做的事。
$(function () {
var jqhxr;
$('#searchForm').submit(function () {
jqhxr = $.post({ url: this.action,
type: this.method,
data: $(this).serialize(),
dataType: 'json',
success: function(data){ alert("success - data"); }
});
jqhxr.done(function () { alert('success - done') });
jqhxr.fail(function () { alert('fail') });
jqhxr.always(function () { alert('complete') });
return false;
});
});
基本上,我在这里所做的只是给了它一个成功的出路。
答案 1 :(得分:1)
好吧,我在这篇博文中找到了答案:http://blog.janjonas.net/2011-08-07/asp_net-mvc_3-jquery-ajax-submit-ajax-form-supporting-unobtrusive-client-side-validation-and-server-side-validation。
唯一的区别是使用$('#searchForm')。live('submit',function(e){...});以及e.preventDefault();的使用,我认为这是关键。我没有阻止默认行为,这就是我在浏览器中看到JSON结果的原因。不解释为什么我收到“失败”警报,但我现在正在获得“成功”警报。所以我发布这个作为答案,因为它包含解决问题的信息的链接。希望这有助于未来的人们!
答案 2 :(得分:0)
尝试将$.post
替换为$.ajax
:
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
dataType: 'json' }
)
.done(function () { alert('success') })
.fail(function () { alert('fail') })
.always(function () { alert('complete') });