Что-то не так с данными, отправляемыми при использовании AJAX с методом POST - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь использовать AJAX с POST. Первоначально метод GET и он работает. Но когда я изменяю метод на POST, я обнаруживаю, что принимающий сервер получает данные как нулевые. В чем может быть моя проблема? Код прост, и я не понимаю, почему он усложняется, когда я меняю метод с «GET» на «POST».

            $.ajax({
                method:"POST",  //Originally GET
                url:"/administrator/change_member_id/",
                timeout:30000,  //30 seconds
                data:{
                    "m_as_id": storeID,
                    "m_id": pad_id("UMID", memberID)
                }
            })
            .done(function(responsedata) {
                var parsedJson = $.parseJSON(responsedata);

                if(parsedJson.result==1) {
                    $("#"+storeID+"_member_id_a").text(pad_id("UMID", memberID));
                    $("#"+storeID+"_member_id_b").text(pad_id("UMID", memberID));
                    alert("Success");
                } else {
                    alert(parsedJson.title+"\n"+parsedJson.description);
                }
            })
            .fail(function(xhr, status, errorThrown) {
                alert("Error communicating with server!");
                console.log("Status: "+status);
                console.log("Error: "+errorThrown);
            })
            .always(function() {
            });

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018
enter code here

способ 1:

        var name = 'data';
        var url='/url';
        data=[];
        data.push({'name':'_token','value':"{{ csrf_token() }}"});
        data.push({'name':'name','value':name});

        $.post(url,data,function (msg) {

           alert(msg)

        });

способ 2:

            $.ajax({
            type:'POST',
            url:'/url',
            data:{_token: "{{ csrf_token() }}",name:name
            },
            success: function( msg ) {

                alert(msg)
            }

Маршрут :: пост ( '/ URL', 'HomeController @ namefunction');

удачи

0 голосов
/ 19 ноября 2018

Оказывается, я не изменил «получить» на «пост» в моем маршруте с использованием фреймворка Laravel. У меня было:

Route::get('/administrator/change_member_id', 'AdministratorController@changeMemberID')->middleware(CheckLogin::class);

Это должно было быть:

Route::post('/administrator/change_member_id', 'AdministratorController@changeMemberID')->middleware(CheckLogin::class);

Затем я наткнулся на другую проблему, когда вообще не мог подключиться к серверу. Оказывается, URL в AJAX был недостаточно точным. У меня было:

url:"/administrator/change_member_id/"

Но он должен быть точно таким же, как маршрут (выше), у которого не было косой черты в самом конце:

url:"/administrator/change_member_id"

Затем я немного поиграл и понял, что URL в AJAX приведет к ошибке соединения, если у меня будет косая черта в самом конце, независимо от URL в маршруте. URL в маршруте может или не может иметь косую черту в самом конце. Так что я не знаю, связано ли это с техническими особенностями POST с URL, например, как GET использует строку запроса (будет иметь косую черту в самом конце), а POST - нет. Или, может быть, это какая-то ошибка в дизайне AJAX, из-за которой POST не так гибок, как GET?

РЕДАКТИРОВАТЬ : Так как я использую Laravel Framework, я думаю, что есть такая вещь, как защита CSRF, поэтому мне пришлось добавить один из:

data: {
    _token: "{{ csrf_token() }}"
},

или

headers: {
    "X-CSRF-TOKEN": "{{ csrf_token() }}"
}
...