Пробуя нарисовать чтонибудь Ajax-о видное выяснил не очень понятную подробность, может быть ктонибудь прокоментирует сее или расскажет откуда ноги ростут ?
А дело вот как было :
Нарисовал я для пробы примерчик в Jscript
xr = new XMLHttpRequest();
xr.open('POST', 'http://www.google.ru', false);
xr.setRequestHeader("Content-Type", "text/xml");
xr.send(null);
return xr.responseText;
метод OPEN проходит нормально без ошибок только в том случае если в URL нет HTTP либо HTTPS но в этом случае возвращается страница в HTML на которой говорится что этот урл не найден .
Но как только я подставляю HTTP в УРЛ метод OPEN на отладке выдает сообщение:
"Ошибка выполнения Microsoft JScript: Разрешение отклонено"
Как тогда сформировать и отослать запрос со своей страницы на другой урл чтобы воспользоваться другим контентом?
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте господа !
А> Пробуя нарисовать чтонибудь Ajax-о видное выяснил не очень понятную подробность, может быть ктонибудь прокоментирует сее или расскажет откуда ноги ростут ?
А> А дело вот как было : А> Нарисовал я для пробы примерчик в Jscript А> xr = new XMLHttpRequest(); А> xr.open('POST', 'http://www.google.ru', false); А> xr.setRequestHeader("Content-Type", "text/xml"); А> xr.send(null); А> return xr.responseText; А> метод OPEN проходит нормально без ошибок только в том случае если в URL нет HTTP либо HTTPS но в этом случае возвращается страница в HTML на которой говорится что этот урл не найден . А> Но как только я подставляю HTTP в УРЛ метод OPEN на отладке выдает сообщение: А> "Ошибка выполнения Microsoft JScript: Разрешение отклонено"
А> Как тогда сформировать и отослать запрос со своей страницы на другой урл чтобы воспользоваться другим контентом?
Насколько я понимаю принцип действия AJAX, и, в частности, метода open(), url должен быть в пределах видимости одного приложения, то есть, не url, а относительный адрес запрашиваемой страницы. Иначе, это уже не AJAX, а зачатки сервиса, а там уже другие правила и принципы работы.
function retrieveURL(action, page){
if (window.XMLHttpRequest) { // Non-IE browsers
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = processStateChange;
try {
xmlhttp.open("GET", page, true);
} catch (e) {
alert(e);
}
xmlhttp.send(null);
} else if (window.ActiveXObject) { // IE
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
if (xmlhttp) {
xmlhttp.onreadystatechange = processStateChange;
xmlhttp.open("GET", page, true);
xmlhttp.send();
}
}
}
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте господа !
А> Пробуя нарисовать чтонибудь Ajax-о видное выяснил не очень понятную подробность, может быть ктонибудь прокоментирует сее или расскажет откуда ноги ростут ?
А> А дело вот как было : А> Нарисовал я для пробы примерчик в Jscript А> xr = new XMLHttpRequest(); А> xr.open('POST', 'http://www.google.ru', false); А> xr.setRequestHeader("Content-Type", "text/xml"); А> xr.send(null); А> return xr.responseText; А> метод OPEN проходит нормально без ошибок только в том случае если в URL нет HTTP либо HTTPS но в этом случае возвращается страница в HTML на которой говорится что этот урл не найден . А> Но как только я подставляю HTTP в УРЛ метод OPEN на отладке выдает сообщение: А> "Ошибка выполнения Microsoft JScript: Разрешение отклонено"
А> Как тогда сформировать и отослать запрос со своей страницы на другой урл чтобы воспользоваться другим контентом?
Для использования контента из другого приложения используйте:
Это ограничение по секьюрити. Нельзя делать cross-domain запросы или как они там называются. В MSIE 6 точно можно было с помощью настроек разрешить это дело, и тогда все работало. А вот в других браузерах — нет. Иногда можно схитрить, сделав свою страничку, которая умеет делать перенаправление или выдирать контент, типа:
А вот с такими вещами надо быть поаккуратнее. Котому-то может захотеться использовать ваше веб-приложение как прокси, хоть это и не входит в ваши планы.
Здравствуйте, Аlexey, Вы писали:
А>А вот с такими вещами надо быть поаккуратнее. Котому-то может захотеться использовать ваше веб-приложение как прокси, хоть это и не входит в ваши планы.
Ну так будьте поаккуратнее, кто мешает.
Re[2]: XMLHttpRequest.Open
От:
Аноним
Дата:
07.07.09 14:01
Оценка:
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Здравствуйте, Аноним, Вы писали:
ВВ>Это ограничение по секьюрити. Нельзя делать cross-domain запросы или как они там называются. В MSIE 6 точно можно было с помощью настроек разрешить это дело, и тогда все работало. А вот в других браузерах — нет. Иногда можно схитрить, сделав свою страничку, которая умеет делать перенаправление или выдирать контент, типа:
ВВ>
Так это, что получается XMLHTTPRequest можно использовать только для внутренних нужд — для передачи данных только между страницами одного проекта(домена)?
Какая то несуразитса выходит URL открыть можно но только свой ......!?
А почему обращение к внешним адресам через тотже класс прокатывает в PHP ?
И никаких ограничений там нет ?
Здравствуйте, Аноним, Вы писали:
А> Так это, что получается XMLHTTPRequest можно использовать только для внутренних нужд — для передачи данных только между страницами одного проекта(домена)? А> Какая то несуразитса выходит URL открыть можно но только свой ......!? А> А почему обращение к внешним адресам через тотже класс прокатывает в PHP ? А> И никаких ограничений там нет ?
Сам по себе XMLHTTPRequest тут не причем. У него никаких ограничений нет. Это ограничение, введенное с целью повышения секьюрности, при запросе с *клиентской* стороны. Ограничение, в котором "виноват" ваш браузер. Он тупо не дает это делать. В PHP это прокатывает потому что вы, очевидно, делаете это на сервере.
Re[4]: XMLHttpRequest.Open
От:
Аноним
Дата:
07.07.09 17:07
Оценка:
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Здравствуйте, Аноним, Вы писали:
А>> Так это, что получается XMLHTTPRequest можно использовать только для внутренних нужд — для передачи данных только между страницами одного проекта(домена)? А>> Какая то несуразитса выходит URL открыть можно но только свой ......!? А>> А почему обращение к внешним адресам через тотже класс прокатывает в PHP ? А>> И никаких ограничений там нет ?
ВВ>Сам по себе XMLHTTPRequest тут не причем. У него никаких ограничений нет. Это ограничение, введенное с целью повышения секьюрности, при запросе с *клиентской* стороны. Ограничение, в котором "виноват" ваш браузер. Он тупо не дает это делать. В PHP это прокатывает потому что вы, очевидно, делаете это на сервере.
Хорошо а если я как клиента буду использовать FireFox или Opera то это огроничение будет также препятствовать отправке запроса или нет ?
Здравствуйте, Аноним, Вы писали:
А> Хорошо а если я как клиента буду использовать FireFox или Opera то это огроничение будет также препятствовать отправке запроса или нет ?
Да. В этих браузерах я вообще не увидел возможности разрешить кросс-доменные запросы из скриптов.
Здравствуйте, <Аноним>, Вы писали:
А> Но как только я подставляю HTTP в УРЛ метод OPEN на отладке выдает сообщение: А> "Ошибка выполнения Microsoft JScript: Разрешение отклонено"
Это защита, встроенная в браузер. Скрипт имеет право получать программным способом только данные с адресов в своём же домене — точные правила того, что такое "свой же домен", можно найти в MSDN. То, что ты делаешь, называется cross-site scripting. А> Как тогда сформировать и отослать запрос со своей страницы на другой урл чтобы воспользоваться другим контентом?
Есть секретная технология — JsHttpRequest, которая обходит эту защиту.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: XMLHttpRequest.Open
От:
Аноним
Дата:
12.07.09 19:05
Оценка:
Здравствуйте, Диспетчер, Вы писали:
Д>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте господа !
А>> Пробуя нарисовать чтонибудь Ajax-о видное выяснил не очень понятную подробность, может быть ктонибудь прокоментирует сее или расскажет откуда ноги ростут ?
А>> А дело вот как было : А>> Нарисовал я для пробы примерчик в Jscript А>> xr = new XMLHttpRequest(); А>> xr.open('POST', 'http://www.google.ru', false); А>> xr.setRequestHeader("Content-Type", "text/xml"); А>> xr.send(null); А>> return xr.responseText; А>> метод OPEN проходит нормально без ошибок только в том случае если в URL нет HTTP либо HTTPS но в этом случае возвращается страница в HTML на которой говорится что этот урл не найден . А>> Но как только я подставляю HTTP в УРЛ метод OPEN на отладке выдает сообщение: А>> "Ошибка выполнения Microsoft JScript: Разрешение отклонено"
А>> Как тогда сформировать и отослать запрос со своей страницы на другой урл чтобы воспользоваться другим контентом?
Д>Для использования контента из другого приложения используйте:
Это замечательно конечно но мне надо как то передать запрос как в Ajax делает метод send причмем запрос в XML форме как тут передать подобный запрос с помощью класса HttpWebRequest я честно говоря не вижу .
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Диспетчер, Вы писали:
Д>>Здравствуйте, Аноним, Вы писали:
А>>>Здравствуйте господа !
А>>> Пробуя нарисовать чтонибудь Ajax-о видное выяснил не очень понятную подробность, может быть ктонибудь прокоментирует сее или расскажет откуда ноги ростут ?
А>>> А дело вот как было : А>>> Нарисовал я для пробы примерчик в Jscript А>>> xr = new XMLHttpRequest(); А>>> xr.open('POST', 'http://www.google.ru', false); А>>> xr.setRequestHeader("Content-Type", "text/xml"); А>>> xr.send(null); А>>> return xr.responseText; А>>> метод OPEN проходит нормально без ошибок только в том случае если в URL нет HTTP либо HTTPS но в этом случае возвращается страница в HTML на которой говорится что этот урл не найден . А>>> Но как только я подставляю HTTP в УРЛ метод OPEN на отладке выдает сообщение: А>>> "Ошибка выполнения Microsoft JScript: Разрешение отклонено"
А>>> Как тогда сформировать и отослать запрос со своей страницы на другой урл чтобы воспользоваться другим контентом?
Д>>Для использования контента из другого приложения используйте:
А> Это замечательно конечно но мне надо как то передать запрос как в Ajax делает метод send причем запрос в XML форме как тут передать подобный запрос с помощью класса HttpWebRequest я честно говоря не вижу .
Ну так и XMLHttpRequest не передает запросы в XML форме, а только может получить такие... И HttpWebRequest тоже может получить запрос в любой форме — это зависит от респондента.
Честно говоря, я уже не совсем понимаю, что Вам нужно. Если передать данные в XML форме, то Вам нужно обратиться к WEB-сервисам. А если только получить из другого домена, то HttpWebRequest, однозначно. Кстати, параметром к нему может служить и строка в XML.
Re[4]: XMLHttpRequest.Open
От:
Аноним
Дата:
13.07.09 07:30
Оценка:
Д>Ну так и XMLHttpRequest не передает запросы в XML форме, а только может получить такие... И HttpWebRequest тоже может получить запрос в любой форме — это зависит от респондента. Д>Честно говоря, я уже не совсем понимаю, что Вам нужно. Если передать данные в XML форме, то Вам нужно обратиться к WEB-сервисам. А если только получить из другого домена, то HttpWebRequest, однозначно. Кстати, параметром к нему может служить и строка в XML.
C сервисами все как раз ясно но сервиса не надо.
Нужно отправить запрос в виде XML и получить ответ в этом же виде.
Идеально подходил для этого XMLHttpRequest с его send методом но выяснилось, что междоменные посылки не допустимы по этому приходится искать другой путь(инструмент) .
Но повторяю, web сервисы тут не уместны это должен быть web ASP.NET application.
HttpWebRequest замечательно для этого подходит — только бы еще узнать как отослать с его помощью асинхронный XML запрос ?
Д>>Ну так и XMLHttpRequest не передает запросы в XML форме, а только может получить такие... И HttpWebRequest тоже может получить запрос в любой форме — это зависит от респондента. Д>>Честно говоря, я уже не совсем понимаю, что Вам нужно. Если передать данные в XML форме, то Вам нужно обратиться к WEB-сервисам. А если только получить из другого домена, то HttpWebRequest, однозначно. Кстати, параметром к нему может служить и строка в XML.
А>C сервисами все как раз ясно но сервиса не надо. А> Нужно отправить запрос в виде XML и получить ответ в этом же виде. А> Идеально подходил для этого XMLHttpRequest с его send методом но выяснилось, что междоменные посылки не допустимы по этому приходится искать другой путь(инструмент) . А> Но повторяю, web сервисы тут не уместны это должен быть web ASP.NET application. А> HttpWebRequest замечательно для этого подходит — только бы еще узнать как отослать с его помощью асинхронный XML запрос ?
Асинхронный не получится, так как у HttpWebRequest нет системы событий, как у XMLHttpRequest. Если только попробовать обернуть его своей реализацией.
Re[6]: XMLHttpRequest.Open
От:
Аноним
Дата:
13.07.09 09:15
Оценка:
Здравствуйте, Диспетчер, Вы писали:
Д>Здравствуйте, Аноним, Вы писали:
Д>>>Ну так и XMLHttpRequest не передает запросы в XML форме, а только может получить такие... И HttpWebRequest тоже может получить запрос в любой форме — это зависит от респондента. Д>>>Честно говоря, я уже не совсем понимаю, что Вам нужно. Если передать данные в XML форме, то Вам нужно обратиться к WEB-сервисам. А если только получить из другого домена, то HttpWebRequest, однозначно. Кстати, параметром к нему может служить и строка в XML.
А>>C сервисами все как раз ясно но сервиса не надо. А>> Нужно отправить запрос в виде XML и получить ответ в этом же виде. А>> Идеально подходил для этого XMLHttpRequest с его send методом но выяснилось, что междоменные посылки не допустимы по этому приходится искать другой путь(инструмент) . А>> Но повторяю, web сервисы тут не уместны это должен быть web ASP.NET application. А>> HttpWebRequest замечательно для этого подходит — только бы еще узнать как отослать с его помощью асинхронный XML запрос ?
Д>Асинхронный не получится, так как у HttpWebRequest нет системы событий, как у XMLHttpRequest. Если только попробовать обернуть его своей реализацией.
А если синхронным рискнуть, то как реально принять XML ответ ?
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Диспетчер, Вы писали:
Д>>Здравствуйте, Аноним, Вы писали:
Д>>>>Ну так и XMLHttpRequest не передает запросы в XML форме, а только может получить такие... И HttpWebRequest тоже может получить запрос в любой форме — это зависит от респондента. Д>>>>Честно говоря, я уже не совсем понимаю, что Вам нужно. Если передать данные в XML форме, то Вам нужно обратиться к WEB-сервисам. А если только получить из другого домена, то HttpWebRequest, однозначно. Кстати, параметром к нему может служить и строка в XML.
А>>>C сервисами все как раз ясно но сервиса не надо. А>>> Нужно отправить запрос в виде XML и получить ответ в этом же виде. А>>> Идеально подходил для этого XMLHttpRequest с его send методом но выяснилось, что междоменные посылки не допустимы по этому приходится искать другой путь(инструмент) . А>>> Но повторяю, web сервисы тут не уместны это должен быть web ASP.NET application. А>>> HttpWebRequest замечательно для этого подходит — только бы еще узнать как отослать с его помощью асинхронный XML запрос ?
Д>>Асинхронный не получится, так как у HttpWebRequest нет системы событий, как у XMLHttpRequest. Если только попробовать обернуть его своей реализацией.
А>А если синхронным рискнуть, то как реально принять XML ответ ?
У меня этот метод возвращает готовый контент, кторый я скармливаю Response.Write(), а Вы обрабатывайте возвращаемое значение как XML и все.