Member 14995979 Ответов: 0

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 с запросами.

0 Ответов