jquery ajax получить текст ответа с URL-адреса http

Ни один:

var response = $.ajax({
    type: "GET",   
    url: "http://www.google.de",   
    async: false,
    success : function() {
        alert (this);
    }
});

Ни:

var response2 = $.get("http://www.google.de", function(data) {
    alert("Data Loaded: " + data);
});

дай мне предмет. Как мне получить доступ к responseText?


person Community    schedule 20.07.2009    source источник


Ответы (9)


Вы просто должны переписать это так:

var response = '';
$.ajax({ type: "GET",   
         url: "http://www.google.de",   
         async: false,
         success : function(text)
         {
             response = text;
         }
});

alert(response);
person stoimen    schedule 20.07.2009
comment
пусто --› нет ответа -- но почему? - person ; 20.07.2009
comment
@all - междоменный ajax не работает, если в домене не включен jsonp - чего не делает Google - person karim79; 20.07.2009
comment
Даже с API-интерфейсом, совместимым с jsonp, это не работает, потому что кажется, что jQuery не хочет синхронизировать запрос ajax с другим доменом... Таким образом, запрос является асинхронным. Это очень, очень скучно... :-/ - person p4bl0; 13.09.2009
comment
Это не лучше, единственная разница в том, где вы предупреждаете пользователя о значении переменной. Кроме того, второй вариант OP, указанный в списке, использовал $.get, который по умолчанию является асинхронным. Если бы он использовал вашу логику с предупреждением вне обработчика событий, он всегда возвращал бы '' независимо от того, был ли запрос успешным или нет. - person sillyMunky; 20.10.2010
comment
Это даже не правильный синтаксис jsonp. Чтобы jQuery мог использовать JSONP, он ожидает параметр обратного вызова в URL-адресе, которого нет в этом примере. - person jmort253; 06.04.2012
comment
ответ будет пустым, если вы удалите async: false, что вы и должны исправить..... - person Seabizkit; 09.12.2015

Как сказал Карим, междоменный ajax не работает, если сервер не разрешает это. В этом случае Google этого не делает, НО во многих случаях есть простой трюк, чтобы обойти это. Просто пусть ваш локальный сервер передает содержимое, полученное через HTTP или HTTPS.

Например, если вы используете PHP, вы можете:

Создайте файл web_root/ajax_responders/google.php с:

<?php
  echo file_get_contents('http://www.google.de');
?>

А затем измените свой код, чтобы подключиться к нему, а не к домену Google непосредственно в javascript:

var response = $.ajax({ type: "GET",   
                        url: "/ajax_responders/google.php",   
                        async: false
                      }).responseText;
alert(response);
person ghbarratt    schedule 23.10.2011

Сначала вам нужно загрузить плагин JQuery, чтобы разрешить междоменные запросы. Загрузите его здесь: https://github.com/padolsey/jQuery-Plugins/downloads

Импортируйте файл с именем query.xdomainsajax.js в свой проект и включите его с помощью этого кода:

<script type="text/javascript" src="/path/to/the/file/jquery.xdomainajax.js"></script>

Чтобы получить html внешней веб-страницы в текстовом виде, вы можете написать это:

$.ajax({
    url: "http://www.website.com",
    type: 'GET',
    success: function(res) {
        var text = res.responseText;
        // then you can manipulate your text as you wish
    }
});
person Marco Pavan    schedule 07.12.2011
comment
Совершенно не связан с этим вопросом, но я подумал, что вам может быть интересен эта JSFiddle. Это связано с вопросом, который вы разместили вчера. - person IgnisErus; 28.10.2013

в функциях jquery ajax сигнатура обратного вызова успеха:

function (data, textStatus) {
  // data could be xmlDoc, jsonObj, html, text, etc...
  this; // the options for this ajax request
}

в зависимости от запрошенного вами типа данных, используя параметр dataType, вы получите аргумент data.

из документов:

dataType (String) По умолчанию: Intelligent Guess (xml или html). Тип данных, которые вы ожидаете получить от сервера. Если ни один из них не указан, jQuery разумно передаст либо responseXML, либо responseText в ваш обратный вызов, основанный на MIME-типе ответа.

Доступные типы (и результат, переданный в качестве первого аргумента обратного вызова успеха):

«xml»: возвращает XML-документ, который можно обработать с помощью jQuery.

"html": возвращает HTML как обычный текст; включенные теги сценария оцениваются при вставке в DOM.

"script": оценивает ответ как JavaScript и возвращает его в виде обычного текста. Отключает кеширование, если не используется опция «кеш». Примечание. Это превратит POST-запросы в GET-запросы для запросов удаленного домена.

"json": оценивает ответ как JSON и возвращает объект JavaScript.

«jsonp»: загружается в блок JSON с использованием JSONP. Добавит лишний "?callback=?" в конец вашего URL, чтобы указать обратный вызов. (Добавлено в jQuery 1.2)

"text": Обычная текстовая строка.

см. http://docs.jquery.com/Ajax/jQuery.ajax#options

person Ken Egozi    schedule 20.07.2009
comment
см. первый другой комментарий - ответ пуст -› нет текста googleHtml?! как ответ :-/ - person ; 20.07.2009

Единственный известный мне способ, который позволяет вам использовать междоменное использование ajax, — это JSONP (http://ajaxian.com/archives/jsonp-json-with-padding).

И вот сообщение, в котором публикуются некоторые различные методы для достижения междоменного ajax (http://usejquery.com/posts/9/the-jquery-cross-domain-ajax-guide)

person Not Available    schedule 06.08.2010

На самом деле, вы можете делать междоменные запросы с помощью, например, Firefox, посмотрите это для обзора: http://ajaxian.com/archives/cross-site-xmlhttprequest-in-firefox-3

Webkit и IE8 также каким-то образом его поддерживают.

person gustaf    schedule 06.08.2010

Поскольку запросы jQuery AJAX терпят неудачу, если они являются междоменными, вы можете использовать cURL (в PHP) для настройки прокси-сервера.

Предположим, что файл PHP responseer.php имеет следующее содержимое:

$url = "https://www.google.com";
$ch      = curl_init( $url );
curl_set_opt($ch, CURLOPT_RETURNTRANSFER, "true")
$response= curl_exec( $ch );
curl_close( $ch );
return $response;

Ваш запрос AJAX должен быть направлен к этому файлу responseer.php, чтобы он выполнял междоменный запрос.

person KannarKK    schedule 19.04.2015

Это очень старо, но, надеюсь, это кому-то поможет. Я отправляю ответы с разными кодами ошибок, и это единственное решение, которое я нашел, которое работает в

$.ajax({
    data: {
        "data": "mydata"
    },
    type: "POST",
    url: "myurl"
}).done(function(data){
    alert(data);
}).fail(function(data){
    alert(data.responseText)
});

Поскольку JQuery не поддерживает функции success и error, вам нужно использовать done и fail и обращаться к данным с помощью data.responseText в fail и только с data в done.

person MANA624    schedule 14.07.2018

попробуй это

alert( data['responseText'] );
person Oleg Ruscinski    schedule 13.08.2016