Будет ли jQuery $ .getJSON () делать то, что мне нужно? - PullRequest
2 голосов
/ 10 сентября 2011

Я пытался написать скрипт, в котором я могу публиковать данные на странице, которая находится в другом домене, чем домен исходной страницы.Я прочитал все о проблемах с этим, и информация привела меня к функции jQuery.getJSON, но я не уверен, будет ли это работать.

Вот мой сценарий:

У меня есть несколько переменных javascript (для этого примера, давайте просто использовать c1, c2, c3, c4 и c5).Итак, я хочу отправить значения этих 5 переменных в скрипт в другом домене.

Я понимаю, как бы это сделать, используя что-то вроде $ .get () или $ .post () - я бы сделалчто-то похожее на это:

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

Мне неясно (1), если getJSON доставит меня туда, куда мне нужно, и (2) если ДА, какая разница в вызове jQuery для функции getJSON (против функции .post), а также если есть что-то другое, что мне нужно сделать на стороне сервера (для моих целей, я просто хотел бы пока отображать значения обратно визуально).

РЕДАКТИРОВАТЬ: При чтении ответов, возможно, мне нужно уточнить.То, что я ищу, - это способ (если вообще возможно) отправить данные с одной страницы на другую страницу в другом домене.Я понимаю проблемы безопасности, поэтому, если это невозможно, это отстой, но я понимаю.Но если есть способ использовать jQuery, это то, что я ищу (и небольшой пример с использованием моих переменных c1 - c5).Спасибо.

Ответы [ 6 ]

2 голосов
/ 11 сентября 2011

Конечно, вы можете отправлять данные на другой сервер (междоменный), используя $.getJSON() в режиме JSONP. Просто ваши данные должны быть частью строки запроса, и вы ограничены в объеме данных, которые вы можете отправлять, поскольку у вас не может быть бесконечно длинных строк запроса. Там не будет никаких изменений в том, как вы обрабатываете данные на стороне сервера, так как запрос будет выглядеть как обычный HTTP GET с params.

Вот пример, взятый из документации по jQuery API. Это включает 4 самых последних изображения собак из API Flickr JSON.

Рабочая демоверсия

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

Обратите внимание, как c1 и c2 передаются как GET параметры. Параметр jsoncallback=? указывает jQuery сделать запрос как запрос JSONP и является обязательным при выполнении междоменных вызовов.

Вот как может выглядеть ваш скрипт:

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

Образец сгенерированного HTTP-запроса:

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

НТН.

2 голосов
/ 10 сентября 2011

Нет, если вам нужно сделать сообщение. Название здесь довольно наглядное: get ... json. Это запрос get с обработкой возврата json. Однако кажется, что вы действительно заинтересованы в отправке json, и для этого вам не нужно ничего особенного.

Однако, если ваша путаница связана с отсутствием функции postjson в jquery, то это может помочь http://abeautifulsite.net/blog/2008/05/postjson-for-jquery/

1 голос
/ 10 сентября 2011

Похоже, для getJSON() было бы бесполезно, потому что не указывается обработчик для работы с результатом.getJSON полезно, если вы знаете, что тип запроса, возвращаемый из запроса, является JSON.

1 голос
/ 10 сентября 2011

.post () отправит данные в виде HTTP-запроса. Здесь он автоматически найдет тип данных данных, которые вы отправляете (json, xml или т. Д.). в то время как .getJSON () будет отправлять данные в виде запроса http get, и здесь тип данных данных указан в формате JSON.

0 голосов
/ 10 сентября 2011

Гм, из документации API на http://api.jquery.com/jQuery.getJSON/:

"Описание: загрузка данных в формате JSON с сервера с использованием GET HTTP запрос. "

Итак, короткий ответ "нет".

0 голосов
/ 10 сентября 2011

Вы не можете совершать AJAX-вызовы в другой домен, поскольку SOP (та же политика происхождения).

Вы можете сделать это с помощью обычной формы POST, но это заставит браузер обработать ответ (показать новую HTML-страницу или выполнить перенаправление и т. Д.).

getJSON - это вызов GET, может отправлять пары значений ключей в виде URL-адресов строк запроса. $ .post - это вызов POST, который отправляет данные в виде полезной нагрузки, а также пары ключ-значение в виде строки запроса в URL. getJSON похож на $ .get (url, handler, 'json'), просто гарантирует, что возвращаемое значение - данные json.

Вы можете, однако, отправить запрос GET в разные домены, используя что-то такое же простое, как динамическое создание тега IMG.

Или вы можете использовать JSONP, но это должен быть вызов GET, если вы хотите сохранить текущий контекст.

Приветствие.

...