Pregunta

He estado tratando de escribir un script donde pueda publicar datos en una página que esté en un dominio diferente al dominio de la página de origen. Leí todo sobre los problemas para hacerlo, y la información me ha llevado a la función jquery.getjson, pero no estoy seguro de si esto funcionará.

Aquí está mi escenario:

Tengo un puñado de variables de JavaScript (para este ejemplo, solo usemos C1, C2, C3, C4 y C5). Entonces, quiero enviar los valores de esas 5 variables a un script en otro dominio.

Entiendo cómo haría esto usando algo como $ .get () o $ .post () - haría algo similar a esto:

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

No estoy claro (1) si el getjson me llevará a donde necesito, y (2) en caso afirmativo, qué diferencia hay en la llamada jQuery para la función getJson (frente a la función .post), así como si hay algo Diferente que necesito hacer en el extremo del servidor (para mis propósitos, solo me gustaría mostrar los valores visualmente por ahora).

EDITAR:Al leer respuestas, tal vez necesite aclarar. Lo que estoy buscando es una forma (si es posible) enviar datos de una página a otra en un dominio diferente. Entiendo las preocupaciones de seguridad, por lo que si no es posible, apesta pero lo entiendo. Pero si hay una manera de usar jQuery, eso es lo que estoy buscando (y un pequeño ejemplo usando mis variables C1 - C5). Gracias.

¿Fue útil?

Solución

Por supuesto, puede enviar datos a otro servidor (dominio cruzado) utilizando $.getJSON() en JSONP modo. Es solo que sus datos deben ser parte de la consulta y está limitado en la cantidad de datos que puede enviar, ya que no puede tener cadenas de consulta infintitamente largas. No habrá cambios en la forma en que procesa los datos en el lado del servidor, ya que la solicitud aparecerá como un HTTP normal GET con params.

Aquí hay un ejemplo levantado de los documentos de JQuery API. Esto atrae a las 4 fotos de perros más recientes de la API Flickr JSON.

Demostración de trabajo

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

Date cuenta cómo c1 y c2 se pasan como GET parámetros. los jsoncallback=? El parámetro instruye a JQuery que haga la solicitud como una solicitud JSONP y es obligatorio al hacer llamadas de dominio cruzado.

Así es como podría ver su guión:

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

Muestra de solicitud HTTP generada:

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

Hth.

Otros consejos

No si necesita hacer una publicación. El nombre es bastante descriptivo aquí: Get ... Json. Es una solicitud GET con el procesamiento de una devolución de JSON. Sin embargo, parece que lo que realmente le interesa es enviar el JSON, y no necesita nada especial para eso.

Sin embargo, si su confusión tiene que ver con la falta de una función postjson en jQuery, entonces esto puede ayudar http://abeautifulsite.net/blog/2008/05/postjson-for-jquery/

El método .post () enviará los datos como solicitud de publicación HTTP. Aquí, encontrará automáticamente el tipo de datos de los datos que está enviando (JSON o XML, etc.). mientras que .getJson () enviará los datos como la solicitud HTTP Get y aquí se especifica el tipo de datos de los datos.

Parece que no habría uso para getJSON() Porque no especifican un controlador para que funcione con el resultado. getJSON es útil si sabe que el tipo de datos devuelto de la solicitud es JSON.

No puede hacer llamadas AJAX a otro dominio porque el SOP (la misma política de origen).

Puede hacerlo con una publicación de formulario normal, pero eso obligará al navegador a procesar la respuesta (muestre una nueva página HTML, o realice una redirección, etc.).

GetJson es una llamada Get, puede enviar pares de valor clave como URL de cadenas de consulta. $. .post es una llamada posterior, CAND envía datos como carga útil y también pares de valor clave como cadena de consulta en la URL. GetJson es como $ .get (URL, Handler, 'JSON'), solo asegura que la devolución sean datos JSON.

Sin embargo, puede enviar la solicitud GET a diferentes dominios, usando algo tan fácil como crear dinámicamente una etiqueta IMG.

O podría usar JSONP, pero tiene que ser una llamada si desea mantener el contexto actual.

Salud.

Um, de la documentación de la API en http://api.jquery.com/jquery.getjson/:

"Descripción: Cargue datos codificados por JSON desde el servidor utilizando una solicitud GET HTTP".

Entonces la respuesta corta es "no".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top