Domanda

Ho provato a scrivere uno script in cui posso pubblicare dati in una pagina che si trova su un dominio diverso rispetto al dominio la pagina di origine. Ho letto tutto sui problemi con questo, e le informazioni mi hanno portato alla funzione jQuery.getjson, ma non sono sicuro che questo funzionerà.

Ecco il mio scenario:

Ho una manciata di variabili JavaScript (per questo esempio, usiamo semplicemente C1, C2, C3, C4 e C5). Quindi, voglio inviare i valori di quelle 5 variabili a uno script su un altro dominio.

Capisco come lo farei usando qualcosa come $ .get () o $ .post () - farei qualcosa di simile a questo:

$.post("myscript.php", { c1:c1, c2:c2, c3:c3, c4:c4, c5:c5 } );

Non sono chiaro (1) se il getjson mi porterà dove ho bisogno e (2) se sì, quale differenza c'è nella chiamata jQuery per la funzione getjson (vs la funzione .post), così come se ci fosse qualcosa Diversamente devo fare all'estremità del server (per i miei scopi, per ora vorrei visualizzare i valori visivamente).

MODIFICARE:Nella lettura delle risposte, forse devo chiarire. Quello che sto cercando è un modo (se possibile) per inviare dati da una pagina a un'altra pagina su un dominio diverso. Capisco i problemi di sicurezza, quindi se non è possibile, fa schifo ma capisco. Ma se c'è un modo usando jQuery, questo è quello che sto cercando (e un piccolo esempio usando le mie variabili C1 - C5). Grazie.

È stato utile?

Soluzione

Ovviamente è possibile inviare dati a un altro server (Cross Domain) utilizzando $.getJSON() in JSONP modalità. È solo che i tuoi dati devono far parte della querystring e sei limitato nella quantità di dati che puoi inviare poiché non puoi avere stringhe di query infattivemente lunghe. Non ci saranno modifiche al modo in cui elaborano i dati sul lato server, poiché la richiesta apparirà come un normale HTTP GET insieme a params.

Ecco un esempio sollevato dai documenti API jQuery. Questo attira le 4 foto più recenti del cane dell'API Flickr JSON.

Demo di lavoro

var c1 = "dog";
var c2 = "any";

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?", {
    tags: c1,
    tagmode: c2,
    format: "json"
}, function(data) {
    $.each(data.items, function(i, item) {
        $("<img/>").attr("src", item.media.m).appendTo("#images");
        if (i == 3) return false;
    });
});

Notare come c1 e c2 sono passati come GET parametri. Il jsoncallback=? Il parametro indica a JQuery di effettuare la richiesta come richiesta JSONP ed è obbligatoria mentre si effettuano chiamate di dominio incrociato.

Ecco come potrebbe apparire la tua sceneggiatura:

var orderId = 1337;
var customer = encodeURIComponent("John Doe");
var amount = 420;

$.getJSON("http://www.otherserver?jsoncallback=?", {
    oId: orderId,
    cust: customer,
    amnt: amount
},

function(data) {
    //process response if any
});

Esempio di richiesta HTTP generata:

http://www.otherserver/?jsoncallback=jQuery16305821700256783515_1315685969538&oId=1337&cust=John%2520Doe&amnt=420&_=1315685969636

Hth.

Altri suggerimenti

Non se hai bisogno di fare un post. Il nome è abbastanza descrittivo qui: ottieni ... JSON. È una richiesta GET con l'elaborazione di un ritorno JSON. Sembra tuttavia che ciò che ti interessa veramente è l'invio del JSON e non hai bisogno di nulla di speciale per questo.

Tuttavia, se la tua confusione ha a che fare con la mancanza di una funzione postjson in jQuery, allora questo può aiutare http://abeautifulsite.net/blog/2008/05/postjson-for-jquery/

Il metodo .Post () invierà i dati come richiesta di post HTTP. Qui troverà automaticamente il tipo di dati dei dati che si sta inviando (JSON o XML o ecc.). mentre .getjson () invierà i dati come richiesta HTTP e qui il tipo di dati dei dati è specificato da JSON.

Sembra che non ci sarebbe alcuna utilità per getJSON() Perché non specificano un gestore per lavorare con il risultato. getJSON è utile se sai che il tipo di dati restituito dalla richiesta è JSON.

Non è possibile effettuare chiamate ajax a un altro dominio perché la SOP (stessa politica di origine).

Potresti farlo con un post di forma normale, ma ciò costringerà il browser a elaborare la risposta (mostra una nuova pagina HTML o eseguire un reindirizzamento, ecc ...).

Getjson è una chiamata, può inviare coppie di valori chiave come URL di corsi di query. $ .Post è una chiamata post, Cand Invia dati come payload e anche coppie di valore chiave come stringa di query nell'URL. getjson è come $ .get (URL, gestore, "json"), garantisce solo che il ritorno sia i dati JSON.

È possibile, tuttavia, inviare richieste a diversi domini, usando qualcosa di facile come creare dinamicamente un tag IMG.

Oppure potresti usare JSONP, ma deve essere una chiamata se si desidera mantenere il contesto attuale.

Saluti.

Um, dalla documentazione API a http://api.jquery.com/jquery.getjson/:

"Descrizione: caricare i dati codificati da JSON dal server utilizzando una richiesta GET HTTP."

Quindi una risposta breve è "No".

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top