Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.04.2012, 22:14
Новичок на форуме
Отправить личное сообщение для slavon22 Посмотреть профиль Найти все сообщения от slavon22
 
Регистрация: 21.04.2012
Сообщений: 2

Кросс-доменные запросы с 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...”) после завершения
 });
});

я со скриптами не очень дружу, но как то справлялся, с этим я вообще в тупик зашел((( Заранее спасибо за помощь
Ответить с цитированием
  #2 (permalink)  
Старый 22.04.2012, 01:51
Аватар для razerxxx
Аспирант
Отправить личное сообщение для razerxxx Посмотреть профиль Найти все сообщения от razerxxx
 
Регистрация: 05.10.2011
Сообщений: 85

Думаю для вас оптимальный вариант - сделать прокси на сервере, или вообще все это дело на сервере парсить.
Например у нас используется nginx на проекте, я на нем делал прокси, если интересно скину настройки - в какую сторону копать.
Ну а так в php (или что у вас там) есть парсеры, и с помощью них можно выудить все что надо, без особых проблем.
Ответить с цитированием
  #3 (permalink)  
Старый 22.04.2012, 01:55
Аватар для razerxxx
Аспирант
Отправить личное сообщение для razerxxx Посмотреть профиль Найти все сообщения от razerxxx
 
Регистрация: 05.10.2011
Сообщений: 85

Но вообще это конечно неэтично - брать чужие данные без спроса. Самый оптимальный вариант - договориться с киноньюс.ру и тягать все по jsonp (ну то есть им конечно надо еще будет реализовать эту возможность)
Ответить с цитированием
  #4 (permalink)  
Старый 22.04.2012, 04:30
Новичок на форуме
Отправить личное сообщение для slavon22 Посмотреть профиль Найти все сообщения от slavon22
 
Регистрация: 21.04.2012
Сообщений: 2

Я думаю что с ними не договоришься... Я не спорю, это не есть хорошо, но я буду брать данные, которые на тысячи других сайтах есть. режиссер, актеры - это общедоступные данные. а если я возьму картинку с их рэйтингом, то я думаю что они только рады будут, что их рекламируют.
Хотелось все таки со скриптом попробовать, да и на эту тему очень мало информации, а если что то и есть, то на английском языке. я думаю что будет полезен такой материал не только мне.
Ответить с цитированием
  #5 (permalink)  
Старый 22.04.2012, 13:56
Аватар для razerxxx
Аспирант
Отправить личное сообщение для razerxxx Посмотреть профиль Найти все сообщения от razerxxx
 
Регистрация: 05.10.2011
Сообщений: 85

так есть этот материал - на этом же сайте. http://javascript.ru/ajax/cross-domain-scripting
Как по мне, - если передача данных со стороннего сервера не согласована - то лучше сделать все же прокси, либо парсить данные серверным скриптом. Использовать разного рода flash iframe... - лично я бы постарался делать это в последнюю очередь.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамически загружаемая jQuery и jQuery-функции в одном файле 67bytes Общие вопросы Javascript 6 06.03.2013 09:01
2 разных модуля на jQuery - как подключить? finder jQuery 4 23.03.2012 22:29
JQuery CSS анализатор javascript jQuery 2 15.08.2010 21:27
jQuery jTreeMenu plugin Seafnox jQuery 9 12.01.2010 21:55
JQuery + FireFox NOOB jQuery 4 02.11.2009 18:16