我有一些問題需要從jQuery中處理ASP MVC控制器方法獲取JSON響應 - 這是我以前嘗試過的沒有問題的東西 - 然而,我明顯做錯了這一次,我無法弄清楚什麼...ASP MVC JsonResult呈現爲頁面,而不是通過調用jQuery函數捕獲
我有一個從ASP MVC 3呈現的火花視圖,調用一個控制器方法返回一個JsonResult。我已經把它簡化成只是一個成功或失敗的消息,直到它實際上工作。我可以通過調試中的兩個路徑跟蹤該方法,並且創建的JSON對象看起來正確。
[HttpPost]
public JsonResult AdjustmentDetail(AdjustmentPaymentModel adjustment)
{
try
{
//do some other processing
return Json(new {success = true}, "application/json");
}
catch(Exception e)
{
return Json(new { success = false, message = e.Message });
}
}
控制器方法正在從火花視圖調用,使用jQuery提交表單並捕獲結果到一些反饋返回到用戶,然後從該點向他們提供一些選擇。目前,它只是設置爲彈出警報,以便我可以看到它收到JSON並執行回調函數。同樣,表單上的一些輸入已被刪除,以便於閱讀(一個純文本框和兩個帶有jQuery日期選擇器的文本框似乎功能正常 - 因此日期選擇器函數在javascript中,我留下的情況下它們可能是干擾)。
<script>
$(document).ready(function() {
$(".datepicker").attr('readOnly', 'true');
});
$(function() {
$('.datepicker').datepicker({
maxDate: 0,
dateFormat: 'dd/mm/yy'
});
});
$('document').ready(function() {
$('#submit-adjustment').submit(function() {
$('#mini-loader').show();
$.post('${Url.Action("AdjustmentDetail", "payments")}', { adjustment: Model }, function (d) {
alert(d);
$('#mini-loader').hide();
}, 'json');
return false;
});
});
</script>
<form action='' id='submit-adjustment' method='post'>
<label for="Notes">
Notes
<small>
<span class="error">${Html.ValidationMessageFor(m => m.Notes)}</span>
</small>
</label>
${Html.EditorFor(m => m.Notes)}
${Html.HiddenFor(m => m.BankAccount)}
${Html.HiddenFor(m => m.IsCreditAdjustment)}
<div style="padding-top:10px;">
<input class="button big" name="submit-adjustment" type="submit" value="Submit Adjustment" />
<img src="/Content/Images/mini-loader.gif" id="mini-loader" style="display: none;"/>
</div>
</form>
過去,上面的工作 - 表單帖子,然後生成的JSON由jQuery回調函數處理。然而在這種情況(在控制器方法是否成功地完成或者拋出異常)時,JSON在瀏覽器中呈現:
{"success":true}
而繼在Chrome JavaScript執行時,該功能或者不被調用或JSON渲染正在改變頁面,纔有機會這樣做。我已經使用Fiddler檢查了電話,帖子迴應的是200,內容類型爲:application/x-www-form-urlencoded
我一直在使用googling這一段時間,而我要麼無法在谷歌查詢中表達問題,要麼我在這裏錯過了一些非常簡單的事情!任何幫助非常感謝 - 請讓我知道,如果我需要提供更多的細節。
它看起來像你的jQuery是張貼到行動'ProcessAdjustment',但你的控制器動作是'AdjustmentDetail' - 你有指向該操作,還是其他地方單獨行動的路線? – 2012-01-03 11:14:21
是的,我在調試時更改了控制器方法名稱。我改變了它並重新測試,行爲是一樣的,無論如何它都是正確的路由(這有點奇怪......)。我將編輯上面的帖子。 – 2012-01-03 11:17:14
A * response * Content-Type的application/x-www-form-urlencoded沒有任何意義 - 你希望它是一個json內容類型。 A *請求*內容類型肯定,但不是響應。 – 2012-01-03 12:52:51