Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кроссдоменный запрос AJAX, Не получается сделать запрос 
:(
    Опции темы
Aleskert
Дата 11.4.2012, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 18.10.2008

Репутация: нет
Всего: нет



Есть сайт, который содержит БД по одной из ММО игрушек.
На сайте красиво рисуются графики в Google Charts.
Цель: хочу себе такие же
Но есть проблема, я не могу сделать кросс-платформенный запрос. 
http://api.jquery.com/jQuery.ajax/ говорит, что просто доставь в параметрах 
Код

crossDomain: true

и будет щастье. Но увы и ах.

Сам запрос я реализировал так:
Код

var JSon = $.ajax({
url: 'http://worldofclans.ru/google_chart/ClanFights.html?id=99',
type: 'GET',
dataType:"json",
crossDomain: true,
async: false,
   success:function(){
      alert("Success");
   },
    error:function(){
       alert("Error");
   }
}).responseText;


Постоянно вылетает ошибка алертом.
Кто-то может помочь?
PM MAIL   Вверх
baldina
Дата 11.4.2012, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 0
Всего: 101



Цитата(Aleskert @  11.4.2012,  20:41 Найти цитируемый пост)
кросс-платформенный

и
Цитата(Aleskert @  11.4.2012,  20:41 Найти цитируемый пост)
crossDomain

это тёплое с мягким  smile 
Вам, конечно, нужен cross domain request
а кросс-платформенный ajax (т.е. независимый от браузера) обеспечивает jquery

документация jquery абсолютно права, Вы просто невнимательно читали. crossDomain - для эмуляции кросс-доменного запроса на своём сервере

Цитата(Aleskert @  11.4.2012,  20:41 Найти цитируемый пост)
dataType:"json",

а для запросов за пределами домена требуется тип jsonp
Код

dataType:"jsonp"




Это сообщение отредактировал(а) baldina - 11.4.2012, 21:08
PM MAIL   Вверх
Aleskert
Дата 11.4.2012, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 18.10.2008

Репутация: нет
Всего: нет



Страница из которой я пытаюсь вытянуть строку JSON не поддерживает callback (а значит и JSONP).
Она просто формирует некоторый данные раз в сутки. И именно эти данные надо вытянуть. Очень жаль, что я не знаком с регулярными выражениями, может они смогут помочь?

Добавлено через 14 минут и 19 секунд
Попытался сделать с помощью PHP таким образом:
Код

<?php
// Set your return content type
header('Content-type: text');

// Website url to open
$daurl = 'http://worldofclans.ru/google_chart/ClanFights.html?id=99';

// Get that website's content
$handle = fopen($daurl, "r");

// If there is something, read and return
if ($handle) {
    while (!feof($handle)) {
        $buffer = fgets($handle, 4096);
        echo $buffer;
    }
    fclose($handle);
}
?>


В этом моменте страница возвращает валидный JSON.
Но $.ajax почему-то его не кушает:
Код

var JSon = $.ajax({
url: 'http://localhost/demo/proxy.php', //страница на которая ловит чужой JSON
dataType:"json",
async: false,
   success:function(){
      alert("Success");
   },
    error:function(){
       alert("Error");
   }
}).responseText;

PM MAIL   Вверх
Aliance
Дата 12.4.2012, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Цитата(Aleskert @  12.4.2012,  00:58 Найти цитируемый пост)
В этом моменте страница возвращает валидный JSON.

Что-то я не заметил там работы с json вообще. там идет работа лишь с файлами.
PM MAIL WWW ICQ Skype   Вверх
Aleskert
Дата 12.4.2012, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 18.10.2008

Репутация: нет
Всего: нет



Спасибо, исправил ошибку. Но появилась новая проблема smile
Код

<?php
// Set your return content type
header('Content-type: json; charset=utf-8');

// Website url to open
$daurl = 'http://worldofclans.ru/google_chart/ClanFights.html?id=99';

// Get that website's content
$handle = fopen($daurl, "r");

// If there is something, read and return
if ($handle) {
    while (!feof($handle)) {
        $buffer = fgets($handle, 4096);
        $old = array("{\"status\":{\"http_code\":200},\"contents\":\"", "\\ufeff", "\"date\"", "\"string\"", "\"\u041a\u043e\u043b-\u0432\u043e \u0431\u043e\u0435\u0432\"", "\"number\"", "\"");
        $new   = array("", "", "'date'", "'string'", "'Кол-во боев'", "'number'", "");
        $buffer = str_replace($old, $new, $buffer);
        echo json_encode($buffer);
    }
    fclose($handle);
}
?>


В самом начале строки появляется BOM, который не дает $.ajax получить свой профит.
Все файлы сохранены в "utf-8 без BOM", откуда он берется - ума не приложу.

Это сообщение отредактировал(а) Aleskert - 12.4.2012, 14:45
PM MAIL   Вверх
baldina
Дата 12.4.2012, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 0
Всего: 101



Цитата(Aleskert @  12.4.2012,  14:44 Найти цитируемый пост)
откуда он берется - ума не приложу

сам php файл случаем не utf с BOM?

Добавлено через 10 минут и 11 секунд
вообще-то http://worldofclans.ru/google_chart/ClanFights.html?id=99 отдает utf c BOM.
php BOM не выкидывает, так что вот
PM MAIL   Вверх
Aliance
Дата 13.4.2012, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Всё-таки не
Код
header('Content-type: json; charset=utf-8');

а
Код
header('Content-type: application/json; charset=utf-8');


Да и функцию fopen для удалённого соединения идеалогически не правильно использовать. Лучше сокеты/cURL.
PM MAIL WWW ICQ Skype   Вверх
baldina
Дата 13.4.2012, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 0
Всего: 101



Цитата(Aliance @  13.4.2012,  10:13 Найти цитируемый пост)
Да и функцию fopen для удалённого соединения идеалогически не правильно использовать.

а file_get_contents()?
а что идеологически неправильного? (всё есть файл...)
PM MAIL   Вверх
Aliance
Дата 13.4.2012, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Цитата(baldina @  13.4.2012,  11:26 Найти цитируемый пост)
а file_get_contents()?

Я словом "сокеты" слишком грубо описал и в том числе эту функцию (все-таки она использует контекст через stream_context_create).
Я вообще приверженец курла, но почему бы и не так.

Что касается fopen, то вот здесь обсуждалась эта тема, почитай комментарии.
PM MAIL WWW ICQ Skype   Вверх
baldina
Дата 13.4.2012, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 0
Всего: 101



почитал. они не кажутся мне убедительными. в том смысле, что нет причин отказываться от этих функций всегда. разработчики php реализовали удобную модель fopen-wrapper (которая к передаче по сети отношения не имеет), почему её не использовать там, где допустимо?

Цитата(Aliance @  13.4.2012,  11:01 Найти цитируемый пост)
все-таки она использует контекст через stream_context_create

я не увидел различий в открытии файла
fopen()
Код

context = php_stream_context_from_zval(zcontext, 0);
stream = php_stream_open_wrapper_ex(filename, mode, (use_include_path ? USE_PATH : 0) | REPORT_ERRORS, NULL, context);
file_get_contents
Код

context = php_stream_context_from_zval(zcontext, 0);
stream = php_stream_open_wrapper_ex(filename, "rb", (use_include_path ? USE_PATH : 0) | REPORT_ERRORS, NULL, context);


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1306 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.