Будет ли этот междоменный вызов с JSONP работать, когда сервер не поддерживает функцию обратного вызова в ответ? - PullRequest
0 голосов
/ 24 июня 2011

Я собираюсь сделать междоменный вызов с помощью jQuery и передать параметры через строку запроса, чтобы заставить сервер выполнить какое-либо действие (например, отправить электронное письмо, создать задание на печать, запустить кофеварку). Моя проблема в том, что сервер не поддерживает ответы JSONP *, и я не могу изменить его в мои сроки.

Предположим, что моя страница размещена в http://foo.com/test.htm, ак веб-сервису делается междоменный вызов по номеру http://bar.com/service.svc`. URL для запуска задания электронной почты выглядит следующим образом (это совершенно вымышлено):

var mailerUrl = "http://bar.com/service.svc?job=email&to=fred&type=outage";

После обдумыванияоб этом, мне интересно, действительно ли имеет значение, что сервер не поддерживает ответы JSONP, поскольку запроса GET к mailerUrl достаточно, чтобы начать работу.

Код jQueryбудь это (я думаю):

$.getJSON(mailerUrl + "&callback=?", function (json) { });

Сервер ответит этим JSON:

{ "d": { "EmailJob": true } }

Обратите внимание, что ответ не обернут в функцию обратного вызова.

Код jQuery завершается сбоем после получения ответа, поскольку он не в формате JSONP.

Однако, что мне интересно, будет ли это успешным междоменный домен во всех основных современных браузерах (IE9, Chrome, Firefox4 + и Safari4 +)?

Ответы [ 2 ]

3 голосов
/ 24 июня 2011

Ответ: нет.Просто представьте, что любой веб-сайт может загружать данные JSON из вашей учетной записи Gmail только потому, что вы вошли в систему - это будет плохо, верно?Поэтому браузеры по праву запрещают вам читать данные JSON в разных доменах, если только цель не позволяет это (через CORS или с помощью обратного вызова).

Если единственная точка отправляет междоменный запрос GET без получения каких-либо данных, то new Image().src = "http://..." - это более легкий путь.

0 голосов
/ 24 июня 2011

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

...