AJAX запрос не работает с первого раза
Всем привет!
Я уже несколько недель борюсь с этим недугом и надеюсь, что вы мне поможете.
Я написал функцию запроса AJAX в файле Javascript для ASP.net основное приложение веб-сайта.
Вот функция AJAX:
function CallPostAjax(Posturl, SuccessMsg, P_Data) { $(document).ready(function () { $.ajax({ cache:false, type: "POST", url: Posturl, contentType: 'application/x-www-form-urlencoded; charset=utf-8', data: P_Data, success: function () { alert(SuccessMsg); }, failure: function (xhr,status) { alert("Failure! " + status + " " + xhr.status); }, error: function (xhr, status) { alert("Result: " + status + " " + xhr.status); } }); }); }
Для запуска запроса сервера нажимается кнопка, расположенная в файле cshtml. Кнопка с ее функцией находится здесь:
function ChangeValue(NewValue, Name, Type) { var token = $('input[name="__RequestVerificationToken"]').val(); ChangeForm(Name.value, token, NewValue.value, Type.value); }
<form id=product onsubmit="ChangeValue(NewValue,Name,Type)"> <input class="EditBoxClass" type="text" id="NewValue" name="NewValue" value=product> <input type="hidden" id="Name" name="Name" value=product> <input type="hidden" id="Type" name="Type" value=ATypeValue> <input class="ButtonClass" type="submit" value="Change" /> </form>
После нажатия кнопки данные передаются функции, записанной в файле Javascript с именем "ChangeForm", которая получает готовые данные и вызывает функцию AJAX.
Вот функция "ChangeForm", которая по существу вызывает функцию AJAX:
function ChangeForm(Name, token, value, type) { //url variable sets the path for the server request to execute the controller's function based on the data type var url; //Set alert message var msg = "Value set successfully"; //set new value var newValue = value; //Set appropriate server function for datatype // a few if statements are here that I did confirm work using the debugger if (type == TheType) { url = myurl; } //define data that will be sent to the server var data = { __RequestVerificationToken: token, Val: newValue }; //call Ajax function CallPostAjax(url, msg, data); }
Самое странное, что функция AJAX отлично работает для одной из моих других страниц, но не работает для этой страницы, где я редактирую значения с помощью поля редактирования. Когда я впервые нажимаю кнопку, ничего не происходит, нет никакого сбоя или сообщения об ошибке. Сообщения об успехе нет, и значение остается прежним (я бы обновил страницу, чтобы быть уверенным). При второй попытке значение изменяется как и должно, но функция успеха не выполняется. С третьего раза кнопка нажимается отлично, так как значение изменяется, и функция успеха также выполняется.
Спасибо!
Что я уже пробовал:
Я использовал отладчик, чтобы определить, где что-то идет не так. Данные установлены так, как я и ожидал, даже в первый раз. Я заметил, что функция сервера не достигается при первом нажатии кнопки. Поэтому данные, по-видимому, не являются проблемой.
Я очистил кэш и установил его как false для функции ajax на предмет возможных проблем с кэшем.
Я попытался добавить "preventDefault()" под "$(document).готов", но, конечно, это просто заставило функцию вообще не работать.
Richard Deeming
Используйте инструменты разработчика браузера для проверки сетевых запросов и отладки скрипта.
Member 14995979
Спасибо, я использовал тот метод, который вы упомянули, и я нашел статус 304 при вызове файла Javascript. В противном случае он в основном показывает статус 200 с запросами.