Post yöntemiyle veri göndererek getJSON nasıl kullanılır?


108

Yukarıdaki yöntemi kullanıyorum ve URL'deki bir parametre ile iyi çalışıyor.

ör. Students/getstud/1kontrolör / işlem / parametre formatının uygulandığı yer.

Şimdi Öğrenci denetleyicisinde iki parametreyi kabul eden ve bir JSON nesnesi döndüren bir eylemim var.

Peki, $.getJSON()gönderi yöntemini kullanarak verileri nasıl gönderebilirim?

Benzer yöntemler de kabul edilebilir.

Amaç, AJAX ile kontrolörün bir eylemini çağırmaktır.


4
getiçinde getJSONyollarla GET kullanmak bazı json olsun.
— Majid Fouladpour

1
@Majid Fouladpour Bu soruyu sorduğumda bilmiyordum ..!
— Vikas

Yanıtlar:


217

$ .GetJSON () yöntemi POST değil HTTP GET yapar. $ .Post () kullanmanız gerekir

$.post(url, dataToBeSent, function(data, textStatus) {
  //data contains the JSON object
  //textStatus contains the status: success, error, etc
}, "json");

Bu çağrıda, dataToBeSentistediğiniz herhangi bir şey olabilir, ancak bir html formunun içeriğini gönderiyorsanız, formunuzdan POST için veri oluşturmak için serileştirme yöntemini kullanabilirsiniz .

var dataToBeSent = $("form").serialize();

7
Sadece $ .getJSON'un Jsonp (etki alanları arası erişim) desteğini eklemek istiyorum maalesef $ .post değil.
— Tomas

2
Aslında .getJSON (), etki alanları arası erişimi iki şekilde destekler. GET veya POST kullanmayan ancak komut dosyası yerleştirme kullanan JSONP; aynı zamanda CORS - ve .post () CORS'u da destekler. Ancak CORS, sunucunun da desteklemesini gerektirirken JSONP desteklememektedir.
— hippietrail

2
Doğru değil, JSONP ayrıca geri arama parametresini ayrıştırmak için sunucu desteği gerektirir.
— Shrulik

Yukarıdaki işlevi kullandığımda, bir json nesnesi yerine bir dize nesnesi alıyorum.
— Pratik Singhal

13

Bu benim "tek satırlık" çözümüm:

$.postJSON = function(url, data, func) { $.post(url+(url.indexOf("?") == -1 ? "?" : "&")+"callback=?", data, func, "json"); }

Jsonp ve POST yöntemini kullanmak için, bu işlev "geri arama" GET parametresini URL'ye ekler. Bunu kullanmanın yolu:

$.postJSON("http://example.com/json.php",{ id : 287 }, function (data) {
   console.log(data.name);
});

Sunucu, geri arama GET parametresini işlemek ve json dizesini şu şekilde döndürmek için hazırlanmalıdır:

jsonp000000 ({"name":"John", "age": 25});

burada "jsonp000000" geri arama GET değeridir.

PHP'de uygulama şöyle olacaktır:

print_r($_GET['callback']."(".json_encode($myarr).");");

Bazı alanlar arası testler yaptım ve işe yarıyor gibi görünüyor. Yine de daha fazla teste ihtiyacım var.


1
POST maksimum boyutu yeniden tanımlanabilirken bu, GET'in sahip olduğu sınırı asla atlamaz.
— Dementic

Neden ekledin ?callback? url'de mi? Bu geri aramanın benim için aranmamasını sağladı. Ben de ekledim JSON.stringify(data). +1, faydalı gönderi!
— Ionică Bizău

@ IonicăBizău: teşekkürler. Bir nesneyi döndürmek için, URL'ye "geri çağrı" parametresi eklememiz gerekir ve sunucunun JQuery tarafından oluşturulan aynı nesne adını döndürmesi gerekir. Ayrıca getJSON () için bir geçersiz kılma işlevi kullanıyorum:jQuery.getJSON = function(url, data, func) { return $.get(url+(url.indexOf("?") == -1 ? "?" : "&")+"callback=?", data, func, "json"); }
— lepe

7

Sadece şu satırları ekleyin <script>(jQuery yüklendikten sonra ancak herhangi bir şey göndermeden önce):

$.postJSON = function(url, data, func)
{
    $.post(url, data, func, 'json');
}

(Bazılarını / tümünü) $.getJSONile değiştirin $.postJSONve keyfini çıkarın!

Aynı Javascript geri arama işlevlerini ile olduğu gibi kullanabilirsiniz $.getJSON. Sunucu tarafı değişikliğine gerek yoktur. (Her zaman $_REQUESTPHP'de kullanmanızı öneririm . Http://php.net/manual/en/reserved.variables.request.php , $ _REQUEST, $ _GET ve $ _POST arasında en hızlı olanı hangisi? )

Bu, @ lepe'nin çözümünden daha basittir.


Bu, normalde getJSON'a uygulayabileceğiniz done () ve fail () yöntemleriyle çalışmadı.
— HackWeight

3

GetJSON yapan kodum vardı. Ben sadece yazı ile değiştirdim. Sürpriz için işe yaradı

   $.post("@Url.Action("Command")", { id: id, xml: xml })
      .done(function (response) {
           // stuff
        })
        .fail(function (jqxhr, textStatus, error) {
           // stuff
        });



    [HttpPost]
    public JsonResult Command(int id, string xml)
    {
          // stuff
    } 

3

Sadece gönderi kullandım ve eğer:

data = getDataObjectByForm(form);
var jqxhr = $.post(url, data, function(){}, 'json')
    .done(function (response) {
        if (response instanceof Object)
            var json = response;
        else
            var json = $.parseJSON(response);
        // console.log(response);
        // console.log(json);
        jsonToDom(json);
        if (json.reload != undefined && json.reload)
            location.reload();
        $("body").delay(1000).css("cursor", "default");
    })
    .fail(function (jqxhr, textStatus, error) {
        var err = textStatus + ", " + error;
        console.log("Request Failed: " + err);
        alert("Fehler!");
    });

1

$.getJSON()AJAX isteği göndermek ve yanıt olarak JSON verilerini geri almak için oldukça kullanışlıdır. Ne yazık ki, jQuery belgelerinde adlandırılması gereken bir kardeş işlev yok $.postJSON(). Neden sadece kullanıp $.getJSON()onunla bitmiyor? Belki de büyük miktarda veri göndermek istiyorsunuz veya benim durumumda IE7 bir GET isteğiyle düzgün çalışmak istemiyor.

Doğru, şu anda bir $.postJSON()yöntem yok , ancak aynı şeyi $.post()işlevde dördüncü bir parametre (tür) belirterek de başarabilirsiniz :

Kodum şöyle görünüyordu:

$.post('script.php', data, function(response) {
  // Do something with the request
}, 'json');

-8

sadece iki parametreniz varsa bunu yapabilirsiniz:

$.getJSON('/url-you-are-posting-to',data,function(result){

    //do something useful with returned result//
    result.variable-in-result;
});

5
Sanırım bu sorulan şeyin cevabı değil.
— Harmeet Singh
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.