Как передать параметры в $ 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");
        }
    }); 
119 голосов | спросил user4127 9 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 09 Sep 2013 15:18:02 +0400 2013, 15:18:02

9 ответов


0

Я бы порекомендовал вам использовать $.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');
ответил Alvaro 9 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 09 Sep 2013 15:23:49 +0400 2013, 15:23:49
0

Попробуйте использовать метод 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 ().

ответил Ajith S 9 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 09 Sep 2013 16:06:05 +0400 2013, 16:06:05
0

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 используется.

ответил Stephen Ostermiller 24 FebruaryEurope/MoscowbWed, 24 Feb 2016 03:02:23 +0300000000amWed, 24 Feb 2016 03:02:23 +030016 2016, 03:02:23
0
    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");
        }
    });   
}
ответил SiwachGaurav 15 SunEurope/Moscow2013-12-15T15:35:44+04:00Europe/Moscow12bEurope/MoscowSun, 15 Dec 2013 15:35:44 +0400 2013, 15:35:44
0

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

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

    type: 'POST',

к

    type: 'GET',

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

ответил Denys Séguret 9 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 09 Sep 2013 15:18:49 +0400 2013, 15:18:49
0

Вы можете сделать это, используя $ .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);
      }
    );
ответил Shrinivas 13 Jam1000000amWed, 13 Jan 2016 08:33:12 +030016 2016, 08:33:12
0
$.ajax(
   {
      type: 'post',
      url: 'superman',
      data: { 
        "field1": "hello",
        "field2": "hello1"
      },
      success: function (response) {
        alert("Success !!");
      },
      error: function () {
        alert("Error !!");
      }
   }
);

type: 'POST' добавит ** параметры в тело запроса **, который > не отображается в URL , а type: 'GET' добавляет параметры к URL-адресу > видимый .

Большинство популярных веб-браузеров содержат сетевые панели, на которых отображается полный запрос .

На панели сети выберите XHR , чтобы просмотреть запросы .

Это также можно сделать с помощью этого.

$.post('superman',
      { 
        'field1': 'hello', 
        'field2': 'hello1'
      },
      function (response) {
        alert("Success !");
      }
    );
ответил Dulith De Costa 30 MarpmFri, 30 Mar 2018 12:52:29 +03002018-03-30T12:52:29+03:0012 2018, 12:52:29
0

Ваш код был верным, за исключением того, что вы не передаете ключи 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");
      }
   }
);
ответил Sylvester Das 10 FebruaryEurope/MoscowbFri, 10 Feb 2017 08:34:51 +0300000000amFri, 10 Feb 2017 08:34:51 +030017 2017, 08:34:51
0

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

$.ajax({
    type: 'POST',
    url: 'superman?' + jQuery.param({ f1: "hello1", f2 : "hello2"}),
    // ...
}); 
ответил Ali.MD 30 Maypm17 2017, 12:17:35

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132