#jquery #asp.net-mvc #jsonresult
#jquery #asp.net-mvc #jsonresult
Вопрос:
я использую asp.net mvc2 с jquery 1.5.2. я притворяюсь, что выполняю вызов на стороне клиента определенного метода в моем контроллере, который возвращает данные json.
На самом деле, мой вызов сервера на стороне клиента работает, но проблема в том, что jquery не распознает возвращенный json.
Я не могу понять, что я делаю не так!, может кто-нибудь помочь мне с этим?
Метод контроллера:
<HttpPost()> _
Function DoStuff(ByVal id As Integer) As JsonResult
Dim retval As JsonResult = Nothing
retval = Json(New xpto With {.P1 = "P1Value"})
Return retval
End Function
Вызов jQuery Ajax:
$.ajax({
url: "/DoStuff/5",
type: "POST",
dataType: "json",
async: false,
success: function(data, textStatus, jqXHR) {
alert(textStatus);
},
error: function(jqXHR, textStatus, errorThrown) {
alert(textStatus);
}
});
Значения при обработке метода ошибок:
Повторная ошибка: jQuery1520029581770420782693_1303980789842 не был вызван
textStatus: ошибка синтаксического анализа
jqXHR.responseText = «{«P1″:»P1Value»}»
Комментарии:
1. Не вижу ничего неправильного в вашем коде. Происходит ли это во всех браузерах? Я протестировал этот код, и он отлично работал.
2. я тестировал на IE8 и FireFox4 (одинаковый результат для обоих)
Ответ №1:
Проблема была не в том коде, который работает нормально, проблема сгенерирована порядком тегов Sctipt в разметке (validate)
НЕВЕРНО:
<script src="/Scripts/jquery-1.5.2.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery-ui-1.8.11.custom.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.maskedinput-1.3.min.js" type="text/javascript"></script>
ВЕРНО:
<script src="/Scripts/jquery-1.5.2.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery-ui-1.8.11.custom.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.maskedinput-1.3.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.min.js" type="text/javascript"></script>