Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   Flash +AJAX (http://www.flasher.ru/forum/showthread.php?t=103968)

Antony_ 16.11.2007 01:13

Flash +AJAX
 
Бось ошибиться разделом. так что больно не бейте.
Поиск юзал, не нашел.

Итак, суть вопроса. совместное использование FLASH и асинронных запросов.

Есть html-ка

Код:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
<script type="text/javascript" src="swfobject.js"></script>
<script type="text/javascript">
function xHttp(url, content) {
var xRequest = window.XMLHttpRequest ? new XMLHttpRequest() : (window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : null)
xRequest.onreadystatechange = function() {
if (xRequest.readyState == 4 && xRequest.status == 200) {
document.getElementById(content).innerHTML = xRequest.responseText;
}
};
xRequest.open('GET', url, true);
xRequest.send(null);
return false;
}
</script>
</head>
<body>
<div id="about">Update your flash player</div>
                  <script type="text/javascript">
                var so = new SWFObject("about.swf", "about", "130", "48", "8", "#ffffff");
                so.write("about");       
        </script>
<h3>Простой пример AJAX'a</h3>

<div id="Debug" style="padding: 1em; border: solid 1px red;">Debug</div>
</body>
</html>

*Скрипт в ней же сверху*

есть about.swf

Код:

on (press){
getURL("return xHttp('page2.html','Debug') ");
}

Но всё это не работает. При вызове через обычную ссылку
Код:

<a href="#" onclick="return xHttp('page2.html','Debug')">Загрузить</a>
Всё прекрасно работает. почему не работает через Swf :(

Кстати,есть еще вариации, вызов через:
Код:

on (press){
getURL("request('page2.html','Debug'); return false; ");
}

Это соответсвенно вызов другого скрипта, но он тоже рабочий через обычнуй ссыль,а через swf не пашет :(

Подскажите как быть?

vooparker 16.11.2007 11:45

не совсем понятно зачем для асинхронных запросов AJAX использовать, когда можно тем же AS все решить.
Дальше:
Код:

getURL("return xHttp('page2.html','Debug') ");
попробуйте ввести строку в кавычках в адресную строку браузера и нажать Enter. =) Чтобы таким образом вызвать js надо указать javascript: вначале строки.
И последнее если появится необходимость переслать данные из js в as такой подход с getURL ничего не даст, так что мой совет почитать про ExternalInterface.

Antony_ 16.11.2007 13:28

Прошу прощения, прокасячил с копированием )

Код:

getURL("javascript: return xHttp('page2.html','Debug') ");
Про ExternalInterface, почитал (поиском я точно пользовался =) )
Пытался сделать, но опять же наверное не правильно.

Код:

import flash.external.ExternalInterface;
ExternalInterface.call( 'xHttp', 'page2.html', 'Debug');


Если не сложно поправте или просто напишите как правильно.

Цитата:

не совсем понятно зачем для асинхронных запросов AJAX использовать, когда можно тем же AS все решить.
Просто в AJAX я вроде как разобрался (вроде как - ключевое слово =) )
И это всё стало работать через через ссылку а через swf невкакую

vooparker 16.11.2007 13:41

а js вообще вызывается из swf?

Antony_ 16.11.2007 13:44

Конечно. В этом нет проблемы Дело в том. что видимо не проходит
Код:

return false;
а вот это как раз и нужно....

vooparker 16.11.2007 13:51

попробуйте так:
Код:

var result:Boolean = ExternalInterface.call("function () {return true;}");
и посмотрите result

Antony_ 16.11.2007 13:59

Это работает.
Мне нужно вызывать вот такую строчку
Код:

return my('page2.html','Debug');
Аналог в html:
Код:

<a href="#" onClick="return my('page2.html','Debug');">Загрузить</a> </p>
http://zteam.ru/my/test/ajax/in4.html
Вот тестовая страничка. При клике по ссылке всё ок. По флэшке -нет :(

Rzer 16.11.2007 14:12

Используйте
Код:

getURL("javascript: return my('page2.html','Debug')");
И проверь разрешены ли скрипты (параметр AllowScriptAcsess) в html'ке

+я не понимаю зачем ты используешь ключевое слово return? если тебе надо получить какое-то значение, то такой способ не прокатит и нужен externalInterface.

vooparker 16.11.2007 14:15

попробуй убрать из my строку:
Код:

return false;
и вызвать так:
Код:

ExternalInterface.call('my', 'page2.html','Debug');

Antony_ 16.11.2007 14:16

Так так и делаю :) Не пашет. Скрипты разрешены, ибо через обычную ссыль всё проходит нормально.

Пример вызова через GetURL

код флэшки, в 1-м сообщении.

Antony_ 16.11.2007 14:18

Цитата:

Сообщение от vooparker
попробуй убрать из my строку:
Код:

return false;
и вызвать так:
Код:

ExternalInterface.call('my', 'page2.html','Debug');

Сделал на страничке in4.html , результат не положительный.

Может класс неправильно подгружаю?
Код:

on (press) {
import flash.External.*;
ExternalInterface.call('my', 'page2.html', 'Debug');
}


vooparker 16.11.2007 14:29

return все еще присутствует.
Мораль такова, очень сложно придумывать варианты почему не работает только по "положительному" или "не положительному" результату.
И еще объясните зачем засовывать во все функции return false?

Antony_ 16.11.2007 14:38

Нету там "return false" это возвращает JS скрипт.

Могу вам выложить исходники чего угодно.

return false запихивается. потомучто иначе не работает AJAX.
http://zteam.ru/my/test/ajax/in2.html
Посмотрите исходник страницы. там два варианта. Это и будет ответ на ваш вопрос.

vooparker 16.11.2007 14:42

=) а да нафиг не нужен return false; Он используется чтобы не вызывать перегрузки страницы при нажатии на ссылку <a>:
Код:

<a href="javascript:callServer('page2.html', 'targetDiv');"> Page2</a>

Antony_ 16.11.2007 14:51

Не понял вас :)

Но без return false страничка как бы "закрывается обратно"
Если что код самого скрипта тут:
http://zteam.ru/my/test/ajax/ajax/ajax.js

vooparker 16.11.2007 14:59

почему у тебя не работает без return false; А происходит следующее ты кликаешь на ссылку и вызывается js-функция, после этого так как это ссылка происходит перевод по ней, в твоем случае ты просто перезагружаешь страницу (так <a href="" ... что означает что страница ссылается на саму себя), чтобы это не происходило и приписывают return false; Если ты воспользуешься способом приведенным выше то можешь смело убирать return false;

Antony_ 16.11.2007 15:32

Спасибо огромное! ссыль заработала. Но флэшка попрежнему не пашет.
Попробовал сделать вот так:
Код:

getURL( "javascript:callServer('page2.html', 'my');","_self");
Не хочет :(

vooparker 16.11.2007 15:38

если ты про страницу in2 то там ужо ошибка другого рода, запрос проходит и возвращается странице, посмотри снифером и убедишься сам, ошибка в другом, по какой то причине до функции showHTML не доходит id дива в который нужно загруженную инфу вставить.

Попробуй так, хотя есть вариант что все равно будет ошибка
Код:

getURL("javascript:callServer('page2.html', 'targetDiv');");

Antony_ 16.11.2007 15:47

Аааааа С П А С И Б О!!!!!
Кажись заработало!!!
:yahoo: :drinks: ОГРОМНЫЙ РЕСПЕКТ ВАМ!!!!!!


Часовой пояс GMT +4, время: 05:33.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.