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.