Как передать параметры в $ajax POST?

Я следил за учебником, как указано в этой ссылке. В приведенном ниже коде по какой-то причине данные не добавляются к URL-адресу в качестве параметров, но если я устанавливаю их непосредственно на URL-адрес с помощью /?field1="hello", он работает.

$.ajax({
        url: 'superman',
        type: 'POST',
        data: { field1: "hello", field2 : "hello2"} ,
        contentType: 'application/json; charset=utf-8',
        success: function (response) {
            alert(response.status);
        },
        error: function () {
            alert("error");
        }
    }); 

Ответ 1

Я бы рекомендовал вам использовать $.post или $.get синтаксис jQuery для простых случаев:

$.post('superman', { field1: "hello", field2 : "hello2"}, 
    function(returnedData){
         console.log(returnedData);
});

Если вам нужно поймать случаи сбоя, просто сделайте следующее:

$.post('superman', { field1: "hello", field2 : "hello2"}, 
    function(returnedData){
         console.log(returnedData);
}).fail(function(){
      console.log("error");
});

Кроме того, если вы всегда отправляете строку JSON, вы можете использовать $. getJSON или $.post с еще одним параметром в самом конце.

$.post('superman', { field1: "hello", field2 : "hello2"}, 
     function(returnedData){
        console.log(returnedData);
}, 'json');

Ответ 2

Попробуйте использовать метод GET,

var request = $.ajax({
    url: 'url',
    type: 'GET',
    data: { field1: "hello", field2 : "hello2"} ,
    contentType: 'application/json; charset=utf-8'
});

request.done(function(data) {
      // your success code here
});

request.fail(function(jqXHR, textStatus) {
      // your failure code here
});

Вы не можете видеть параметры в URL с методом POST.

Edit:

Уведомление об изнашивании: jqXHR.success(), jqXHR.error() и jqXHR.complete() обратные вызовы удаляются с jQuery 3.0. Вы можете использовать jqXHR.done(), jqXHR.fail() и jqXHR.always().

Ответ 3

Jquery.ajax не кодирует данные POST автоматически, как это делается для данных GET. Jquery ожидает, что ваши данные будут предварительно сформированы для добавления в тело запроса для отправки непосредственно через провод.

Решение состоит в использовании функции jQuery.param для построения строки запроса, которую ожидают большинство скриптов, обрабатывающих запросы POST.

$.ajax({
    url: 'superman',
    type: 'POST',
    data: jQuery.param({ field1: "hello", field2 : "hello2"}) ,
    contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
    success: function (response) {
        alert(response.status);
    },
    error: function () {
        alert("error");
    }
}); 

В этом случае метод param форматирует данные:

field1=hello&field2=hello2

Документация Jquery.ajax гласит, что существует флаг под названием processData, который контролирует, выполняется ли это кодирование автоматически или нет. В документации указано, что она по умолчанию равна true, но это не то поведение, которое я наблюдаю при использовании POST.

Ответ 4

    function FillData() {
    var param = $("#<%= TextBox1.ClientID %>").val();
    $("#tbDetails").append("<img src='Images/loading.gif'/>");
    $.ajax({
        type: "POST",/*method type*/
        contentType: "application/json; charset=utf-8",
        url: "Default.aspx/BindDatatable",/*Target function that will be return result*/
        data: '{"data":"' + param + '"}',/*parameter pass data is parameter name param is value */
        dataType: "json",
        success: function(data) {
               alert("Success");
            }
        },
        error: function(result) {
            alert("Error");
        }
    });   
}

Ответ 5

В POST-запрос параметры отправляются в теле запроса, поэтому вы не видите их в URL-адресе.

Если вы хотите их увидеть, измените

    type: 'POST',

к

    type: 'GET',

Обратите внимание, что в браузерах есть инструменты для разработки, которые позволяют вам видеть полные запросы, которые вызывают в вашем коде. В Chrome он находится в панели "Сеть".

Ответ 6

Вы можете сделать это, используя $.ajax или $.post

Использование $.ajax:

    $.ajax({
      type: 'post',
      url: 'superman',
      data: { 
        'field1': 'hello', 
        'field2': 'hello1'
      },
      success: function (response) {
        alert(response.status);
      },
      error: function () {
        alert("error");
      }
   });

Использование $.post:

    $.post('superman',
      { 
        'field1': 'hello', 
        'field2': 'hello1'
      },
      function (response, status) {
        alert(response.status);
      }
    );

Ответ 7

Ваш код был прав, за исключением того, что вы не передаете ключи JSON в виде строк.

Он должен иметь двойные или одинарные кавычки вокруг него

{ "field1": "hello", "field2": "hello2" }

$.ajax(
   {
      type: 'post',
      url: 'superman',
      data: { 
        "field1": "hello", // Quotes were missing
        "field2": "hello1" // Here also
      },
      success: function (response) {
        alert(response);
      },
      error: function () {
        alert("error");
      }
   }
);

Ответ 8

Для отправки параметров в URL-адресе в POST метод. Вы можете просто добавить его в url следующим образом:

$.ajax({
    type: 'POST',
    url: 'superman?' + jQuery.param({ f1: "hello1", f2 : "hello2"}),
    // ...
});