Domanda

Sto usando metodo di cui sopra e funziona bene con un parametro nella URL.

es. Students/getstud/1 dove viene applicata regolatore / azione / formato di parametro.

Ora ho un'azione di controllo Gli studenti che accetta due parametri e restituisce un oggetto JSON.

Quindi, come faccio a pubblicare i dati con $.getJSON() usando il metodo post?

Metodi simili sono anche accettabili.

Il punto è di chiamare un'azione del controller con AJAX.

È stato utile?

Soluzione

Il metodo $ GetJSON () fa un HTTP GET e non POST. È necessario utilizzare $ .post ()

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

In quella chiamata, dataToBeSent potrebbe essere tutto quello che vuoi, ma se stanno inviando il contenuto di un modulo HTML, è possibile utilizzare il serializzare metodo per creare i dati per il POST dal modulo.

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

Altri suggerimenti

Questa è la mia soluzione "one-line":

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

Per poter utilizzare jsonp, e il metodo POST, questa funzione aggiunge il parametro "callback" GET all'URL. Questo è il modo di usarlo:

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

Il server deve essere preparato a gestire il parametro di callback GET e restituire la stringa JSON come:

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

in cui "jsonp000000" è il valore di callback GET.

In PHP l'attuazione sarebbe come:

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

Ho fatto alcuni test cross-domain e sembra funzionare. Ancora bisogno di ulteriori test però.

Basta aggiungere queste righe al <script> (da qualche parte dopo jQuery è caricato, ma prima di pubblicare qualsiasi cosa):

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

Sostituire (alcuni tutto /) $.getJSON con $.postJSON e godere!

È possibile utilizzare le stesse funzioni di callback JavaScript come con $.getJSON. Non è necessario alcun cambiamento sul lato server. (Beh, vi consiglio di usare sempre $_REQUEST in PHP. http://php.net /manual/en/reserved.variables.request.php , Tra $ _REQUEST , $ _GET e $ _POST che uno è il più veloce? )

Questa è più semplice di @ di Lepe soluzione.

ho avuto il codice che stava facendo getJSON. Ho semplicemente sostituito con posta. Con mia grande sorpresa, ha funzionato

   $.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
    } 

Ho appena usato postale e un se:

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

$.getJSON() è piuttosto comodo per l'invio di una richiesta AJAX e tornare dati JSON come risposta. Ahimè, la documentazione jQuery manca una funzione sorella che dovrebbe essere nominato $.postJSON(). Perché non basta usare $.getJSON() e da fare con esso? Be ', forse si desidera inviare una grande quantità di dati o, nel mio caso, IE7 proprio non vuole funzionare correttamente con una richiesta GET.

E 'vero, non esiste attualmente alcun metodo $.postJSON(), ma è possibile ottenere lo stesso specificando un quarto parametro (tipo) nella funzione $.post():

Il mio codice si presentava così:

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

se avete solo due parametri, si può fare questo:

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

    //do something useful with returned result//
    result.variable-in-result;
});
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top