2009-07-29 3 views
6

У меня есть существующий плагин jQuery, который делает много вызовов AJAX (в основном JSON). Мне интересно, что самое быстрое, чтобы позволить ему выполнять межсайтовые вызовы, то есть URL-адрес $ .get и $ .post не будет из того же домена.Межсайтовый AJAX с использованием jQuery

Я слышал о JSONP, но задавался вопросом, может ли кто-нибудь дать мне конкретный пример для всего процесса. Я хочу внести минимальные изменения, если это возможно, в мой скрипт. Должен ли я использовать proxy.php?

Спасибо за ваше время.

ответ

13

JSONP позволит вам осуществлять межсайтовые звонки. See jQuery docs on that matter.

Концепция проста: вместо обычного вызова Ajax jQuery добавит тег <script> к вашему <head>. Чтобы это сработало, ваши данные JSON должны быть завернуты в вызов функции .

Ваш сервер должен послать информацию таким способом (PHP пример):

$json = json_encode($data); 
echo $_GET['jsonp_callback'] . '(' . $json . ');'; 

Затем вы можете использовать JQuery, чтобы извлечь эту информацию:

$.ajax({ 
    dataType: 'jsonp', 
    jsonp: 'jsonp_callback', 
    url: 'http://myotherserver.com/getdata', 
    success: function() { 
    // do stuff 
    }, 
}); 

Более подробная информация доступна здесь: What is JSONP?

+0

Ницца! Я продолжу и проверю это. За исключением того, что я думаю, что эхо-статут должен печатать переменную $ json, а не $ data. Это верно ? –

+1

@PHP_Jedi: Это было бы правильно. Я только что исправил эту опечатку (которая, смущающе, была там уже 2 года). –

+0

Работает как очарование! –

2

Если у вас есть контроль над удаленным доменом или удаленный домен имеет разрешающий crossdomain.xml, вы можете добавить его в библиотеку, например flXHR, в сочетании с ее jQuery plugin.

1

Вы также можете использовать CORS вместо JSONP, работает с ff, chrome, safari. CORS менее хлопотно для настройки и требует только фильтра на стороне сервера.

Просьба ознакомиться с этой статьей. Расскажите об этом и поделитесь. Единственное ограничение - IE не поддерживает эту и более старые версии FF, хром также имеет некоторые проблемы.

http://techblog.constantcontact.com/software-development/using-cors-for-cross-domain-ajax-requests/

+0

Не могли бы вы описать, как использовать его в своем ответе, пожалуйста? – Ryan

Смежные вопросы