[jquery] ajax и xml_parser - проблема с внешним url

Jekich

Задача: Нужно распарсить xml-документ http://www.roboxchange.com/xml/currlist.asp
То, что написано работает только, если в качестве урла подсунуть currlist.xml (предварительно скачивать приходится а если указывать прямой (внешний) урл http://www.roboxchange.com/xml/currlist.asp, то ничего не работает :(
Вопрос: как побороть? Нужно чтобы принимала на вход внешние урлы
файл rk_xml_int.js

func/tion getXML(url){
$.ajax({
url: url,
type: "GET",
dataType: "xml",
encoding:"utf-8",
beforeSend: xmlStart,
success: xmlSuccess,
error: xmlError,
complete: xmlComplete
});
}

function xmlStart(xhrInstance) {
$("#xmlConsole").addClass("ajaxLoaderCSS");
//return true;
}
function xmlError(xhrInstance, message, optional) {
$("#xmlConsole").html(message);
}
function xmlComplete(xhrInstance, status){
$("#xmlConsole").removeClass( "ajaxLoaderCSS" );
//return true;
}
function xmlSuccess(data, status){
parseXML(data);
}
function parseXML(xml){
alert('1');
var content = '';
$( xml ).find('item').each(function{
var curr = $(this).find('curr').text;
var curr_name = $(this).find('curr_name').text;

content += 'curr - ' + curr + '<br />';
content += 'curr_name - ' + curr_name + '<br /><hr />';
});
$("#xmlConsole").html(content);
}

Соответственно тестовая страничка

<html>
<head>
<title>test robokassa int</title>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="rk_xml_int.js"></script>
<script type="text/javascript">
$(function{
getXML('http://www.roboxchange.com/xml/currlist.asp');
});
</script>
</head>

<body>
<div id="xmlConsole"></div>
</body>
</html>

pilot

А в jquery ajax умеет лазить на посторонние сайты?

uncle17

XMLHttpRequest в принципе не умеет работать с несвоим доменом. Сделано специально против XSS

pilot

Ну вот, так сразу и выдал :)
Ссылка: http://en.wikipedia.org/wiki/Same_origin_policy
Хз что это: http://www.ajax-cross-domain.com/
JQuery: http://docs.jquery.com/Ajax/jQuery.getScript#urlcallback
Итого: проще настроить прокси. Но можно поисследовать код roboxchange вдруг да есть там нужный js.

Plok2008

проще настроить прокси
Именно так. Например на первой страничке гуглится вот это web page. Простенькая php-proxy. Если тебе нужно брать только один файл, то можно её подкрутить, чтобы запрашивать именно его. Также потратив ещё 2-5 минут можно прикрутить простенькое кеширование, чтобы не постоянно гонять запросы на внешний сервер, а скажем не чаще 1 раза в час, или какая там тебе требуется периодичность обновления информации.

serega1604

нафега только там php если апач сам умеет проксировать запросы?

Jekich

проще настроить прокси.
именно так и сделал
немного повозился с curl и google вот, что получилось (вдруг кому пригодится)

<?php
$url = 'http://www.roboxchange.com/xml/rate.asp';

$request = '<robox.rate.req>';
//$request .= '<in_curr>WMZ</in_curr>';
$request .= '<out_curr>WMZ</out_curr>';
$request .= '<merchant_login>demo</merchant_login>';
$request .= '<out_cnt>900000</out_cnt>';
$request .= '</robox.rate.req>';

$ch = curl_init;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 4);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: close';

$result = curl_exec($ch);

header('Content-type: text/xml');
echo $result;

curl_close($ch);
?>

hwh2010

XMLHttpRequest в принципе не умеет работать с несвоим доменом.
cross-site ajax можно разрешить для выбранных сайтов в IE и FF
Оставить комментарий
Имя или ник:
Комментарий: