Кросс-доменные запросы с jQuery
Доброго времени суток. Очень нужна ваша помощь.
Весь интернет перечитал, так разобраться и не смог :( смысл такой: Нужно при добавлении нового материала некоторые формы заполнялись автоматически, а именно, должно быть окошко куда вставляется ссылка на сайт киноньюс.ру, при нажатие кнопки скрипт должен вытащить с этой страницы "режесер", "актеры", "ссылку на картинку с рэйтингом" и вставить в форму добавления материала очень долго искал в интернете и узнал что обычный яваскрипт не даст сделать запрос на другой домен, но есть один путь, плагин к jquery jquery.xdomainajax вот его код /** * jQuery.ajax mid - CROSS DOMAIN AJAX * --- * @author James Padolsey ([url]http://james.padolsey.com[/url]) * @version 0.11 * @updated 12-JAN-10 * --- * Note: Read the README! * --- * @info [url]http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/[/url] */ jQuery.ajax = (function(_ajax){ var protocol = location.protocol, hostname = location.hostname, exRegex = RegExp(protocol + '//' + hostname), YQL = 'http' + (/^https/.test(protocol)?'s':'') + '://query.yahooapis.com/v1/public/yql?callback=?', query = 'select * from html where url="{URL}" and xpath="*"'; function isExternal(url) { return !exRegex.test(url) && /:\/\//.test(url); } return function(o) { var url = o.url; if ( /get/i.test(o.type) && !/json/i.test(o.dataType) && isExternal(url) ) { // Manipulate options so that JSONP-x request is made to YQL o.url = YQL; o.dataType = 'json'; o.data = { q: query.replace( '{URL}', url + (o.data ? (/\?/.test(url) ? '&' : '?') + jQuery.param(o.data) : '') ), format: 'xml' }; // Since it's a JSONP request // complete === success if (!o.success && o.complete) { o.success = o.complete; delete o.complete; } o.success = (function(_success){ return function(data) { if (_success) { // Fake XHR callback. _success.call(this, { responseText: data.results[0] // YQL screws with <script>s // Get rid of them .replace(/<script[^>]+?\/>|<script(.|\s)*?\/script>/gi, '') }, 'success'); } }; })(o.success); } return _ajax.apply(this, arguments); }; })(jQuery.ajax); запрос создается типа того : <!—вставляет jQuery, cross-domain-ajax плагин и наш скрипт --> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script> <script type="text/javascript" src="js/jquery.xdomainajax.js"></script> <script type="text/javascript" src="js/main.js"></script> $(document).ready(function() { $.get('http://snipplr.com/all/language/jquery', function(res) { // получение html-кода этого сайта $(res.responseText).find('.snippets li h3').each(function() { // циклически вырезаются все H3 заголовки var anchor = $(this).children('a:last'); // получение последней ссылки внутри текста jQuery('<li/>', { // создаем LI html: jQuery('<a/>', { // с A внутри href: 'http://snipplr.com' + anchor.attr('href'), // указываем href для ссылки text: anchor.text() // и текст }) }).appendTo($('#jquery_snippets')); // добавляем к списку }); $('#jquery_snippets li:first').remove(); // удаляем первый LI (“Loading...”) после завершения }); }); я со скриптами не очень дружу, но как то справлялся, с этим я вообще в тупик зашел((( Заранее спасибо за помощь |
Думаю для вас оптимальный вариант - сделать прокси на сервере, или вообще все это дело на сервере парсить.
Например у нас используется nginx на проекте, я на нем делал прокси, если интересно скину настройки - в какую сторону копать. Ну а так в php (или что у вас там) есть парсеры, и с помощью них можно выудить все что надо, без особых проблем. |
Но вообще это конечно неэтично - брать чужие данные без спроса. Самый оптимальный вариант - договориться с киноньюс.ру и тягать все по jsonp (ну то есть им конечно надо еще будет реализовать эту возможность)
|
Я думаю что с ними не договоришься... Я не спорю, это не есть хорошо, но я буду брать данные, которые на тысячи других сайтах есть. режиссер, актеры - это общедоступные данные. а если я возьму картинку с их рэйтингом, то я думаю что они только рады будут, что их рекламируют.
Хотелось все таки со скриптом попробовать, да и на эту тему очень мало информации, а если что то и есть, то на английском языке. я думаю что будет полезен такой материал не только мне. |
так есть этот материал - на этом же сайте. http://javascript.ru/ajax/cross-domain-scripting
Как по мне, - если передача данных со стороннего сервера не согласована - то лучше сделать все же прокси, либо парсить данные серверным скриптом. Использовать разного рода flash iframe... - лично я бы постарался делать это в последнюю очередь. |
Часовой пояс GMT +3, время: 11:43. |