$ Ajax POST'ta parametreler nasıl aktarılır?


135

Bu linkte belirtildiği gibi öğreticiyi takip ettim . Herhangi bir nedenle aşağıdaki kodda veriler URL olarak parametre olarak eklenmez, ancak bunları kullanarak url'ye doğrudan ayarlarsam /?field1="hello"çalışır.

$.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");
        }
    }); 

8
Parametrelerinizin URL'ye eklenmesini istiyorsanız, türü 'GET' olarak değiştirmeniz gerekir. 'POST', parametreleri HTTP başlıklarına geçirir.
soymak

Yanıtlar:


126

Basit durumlar için jQuery $.postveya $.getsözdizimini kullanmanızı öneririm :

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

Başarısız durumları yakalamanız gerekiyorsa, bunu yapın:

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

Ayrıca, her zaman bir JSON dizesi gönderirseniz , en sonunda bir parametre ile $ .getJSON veya $ .post kullanabilirsiniz .

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

1
JQuery'nin daha yeni sürümleri $ .post ve $ .get öğelerinden bir done (), fail () veya always () işleyicisini 'asılı' destekler. Bakınız: api.jquery.com/jQuery.post
CyberMonk

nedir field1:ve nedir "hello"? JS veya PHP'deki değişkenler?
MTBthePRO

field1 ve field2 POST değişkenleridir. Merhaba ve Hello2 onların değeridir.
Alvaro

57

GET yöntemini kullanmayı deneyin,

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'de POST yöntemiyle parametreleri göremezsiniz.

Düzenle:

Kullanımdan Kaldırılma Bildirimi: jQXHR.success (), jqXHR.error () ve jqXHR.complete () geri çağrıları, jQuery 3.0'dan kaldırılır. Bunun yerine jqXHR.done (), jqXHR.fail () ve jqXHR.always () kullanabilirsiniz.


53

Jquery.ajax POST verilerini sizin için otomatik olarak GET verileri için kodladığı gibi kodlamaz. Jquery, doğrudan kablo üzerinden gönderilecek istek gövdesine eklenecek şekilde verilerinizin önceden oluşturulmasını bekler.

Bir çözüm, POST isteklerini işleyen çoğu komut dosyasının beklediği bir sorgu dizesi oluşturmak için jQuery.param işlevini kullanmaktır .

$.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");
    }
}); 

Bu durumda paramyöntem, verileri şu şekilde biçimlendirir:

field1=hello&field2=hello2

Jquery.ajax belgeler adlı bir bayrak olduğunu söylüyor processDatabu kodlama otomatik veya değil yapılır mı bu kontrolleri. Belgeler, varsayılan olarak olduğunu söylüyor true, ancak POSTkullanıldığında gözlemlediğim davranış bu değil .


7
Sanırım 'neden'i açıklayan tek cevap bu.
zhouji

15
    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");
        }
    });   
}

11

Bir de POST isteği , parametreler gövdesinde gönderilir, bu yüzden bunları URL'de görmezsiniz.

Onları görmek istiyorsanız değiştirin

    type: 'POST',

için

    type: 'GET',

Tarayıcıların, kodunuzun verdiği isteklerin tamamını görmenizi sağlayan geliştirme araçlarına sahip olduğunu unutmayın. Chrome'da "Ağ" panelindedir.


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

type: 'POST'** parametreleri ekler edilir istek ** gövdesine görmedim de URL'ye ederken type: 'GET', bir URL'ye parametreler ekler görünür .

Popüler web tarayıcılarının çoğunda, isteğin tamamını görüntüleyen ağ panelleri bulunur .

Ağ panelinde istekleri görmek için XHR'yi seçin .

Bu da bununla yapılabilir.

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

6

$ .Ajax veya $ .post kullanarak yapabilirsiniz

$ .Ajax kullanma:

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

$ .Post kullanarak:

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

Çok teşekkür ederim - Çalışıyor. Bununla birlikte, post parametrelerini almak için bir işlevi çağıran bir örnek ekleyebilmeniz harika olurdu. Teşekkürler! :)
gies0r

3

JSON anahtarlarını dize olarak geçirmemeniz dışında kodunuz doğruydu.

Etrafında çift veya tek tırnak bulunmalıdır

{"field1": "merhaba", "field2": "merhaba2"}

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

0

Metoddaki url'deki parametreleri göndermek POSTiçin URL'yi şu şekilde ekleyebilirsiniz:

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

2
Soru soran sadece POST yoluyla bazı parametreler göndermek isterse, diğer cevaplar daha uygun olacaktır, çünkü bu daha standart olacaktır. Soru, POST ve URL parametrelerini açıkça belirtiyor. (Örneğin bu soruyu buldum çünkü URL parametrelerini gövdedekilerle tamamen ayarlamam gerekiyor ve bunu dizeleri birleştirmekten daha güzel bir şekilde yapmak istiyorum.) @ User4127 bunu cevap olarak kabul edin veya sorunuzu yeniden biçimlendirin.
Jan Molnar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.