Прокси для подключения к кросс-серверу XML. Использование Ajax работает в некоторых браузерах, а не в других? код включен - PullRequest
0 голосов
/ 14 августа 2011

Хорошо, так что сначала позвольте мне объяснить, что я делаю:

Я пытаюсь подключиться к http://www.nfl.com/liveupdate/scorestrip/ss.xml, чтобы захватить XML и проанализировать его, конечно, междоменная политика не позволит мне сделать этонепосредственно.SOOOO ..

Я использую PHP для подключения к сайту через прокси-сервер, и это прекрасно работает

Затем в моем основном HTML-файле я использую Ajax для анализа этого XML-файла.Проблема в том, что я получаю смешанные результаты.Например, на моем MacBook Pro со всеми последними браузерами (Safari, Firefox, Chrome) это не работает.На моем айфоне это работает.и на моем Mac Desktop со всеми последними браузерами это работает.

Кто-нибудь знает почему?

ТАКЖЕ я понятия не имею, что я делаю с XML, это моя самая первая попытка научиться читать через XML.Поэтому мне может понадобиться, чтобы вы объяснили, как лучше анализировать, хотя, как я делаю это сейчас, от другого онлайн-пользователя.

Вот прокси PHP, который работает:

<?php

$server_url = "http://www.nfl.com/liveupdate/scorestrip/ss.xml";

$options = array
(
    CURLOPT_HEADER         => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_TIMEOUT        => 60,
    CURLOPT_CONNECTTIMEOUT => 0,
    CURLOPT_HTTPGET        => 1
);

$service = $_GET["service"];

$request_headers = Array();
foreach($_SERVER as $i=>$val) {
        if (strpos($i, 'HTTP_') === 0) {
                $name = str_replace(array('HTTP_', '_'), array('', '-'), $i);
                if ($name != 'HOST')
                {
                    $request_headers[] = "{$name}: {$val}";
                }
        }
}

$options[CURLOPT_HTTPHEADER] = $request_headers;

switch (strtolower($_SERVER["REQUEST_METHOD"]))
{

    case "post":
        $options[CURLOPT_POST] = true;
        $url = "{$server_url}".$service;

        $options[CURLOPT_POSTFIELDS] = file_get_contents("php://input");

        break;
    case "get":

        unset($_GET["service"]);

        $querystring = "";
        $first = true;
        foreach ($_GET as $key => $val)
        {
            if (!$first) $querystring .= "&";
            $querystring .= $key."=".$val;
            $first = false;
        }

        $url = "{$server_url}".$service."?".$querystring;

        break;
    default:
        throw new Exception("Unsupported request method.");
        break;

}

$options[CURLOPT_URL] = $url;

$curl_handle = curl_init();

curl_setopt_array($curl_handle,$options);
$server_output = curl_exec($curl_handle);
curl_close($curl_handle);

$response = explode("\r\n\r\n",$server_output);
$headers = explode("\r\n",$response[0]);

foreach ($headers as $header)
{
    if ( !preg_match(';^transfer-encoding:;ui', Trim($header))  )
    {
        header($header);
    }
}

echo $response[1]; 


?> 

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
</head>

<body>
</body>
</html>

Вот проблемный HTML-файл с AJAX:

<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>

<script>

$.ajax({
    type: "GET",
    url: "http://www.allencoded.com/test3.php",
    dataType: "xml",
    success: function(xml) {
        // Interpret response
        $(xml).find('g').each(function() {

            // Example: Show the XML tag in the console
            console.log(this);

            // Example: Put some output in the DOM
            $("#divOutput").append($(this).attr("hnn"));

        });

        $(xml).find('g').each(function() {



            // Example: Put some output in the DOM
            $("#divOutput").append($(this).attr("vnn"));

        });        

    }
});
</script>

<div id="divOutput"></div>

</body></html>

Наконец, вот XML для справки: http://www.nfl.com/liveupdate/scorestrip/ss.xml

Я действительно ищу способ разобрать это, так как это будет потрясающеучебный опыт.Кстати, если это поможет Firefox на моем macbook со всеми проблемами, это говорит мне: отсутствует) в скобках 12

Также я был бы очень признателен, если бы вы были так любезны ответить в терминах, которые может понять новичок в работе сXML, поскольку я новичок в этом.

Спасибо!

Редактировать: Добавление ссылок моего сайта на этот код: http://allencoded.com/footballxml.html и http://allencoded.com/test3.php

1 Ответ

0 голосов
/ 14 августа 2011

Если это не вызвано какой-либо проблемой C & P, это может быть причиной:

$(xml).find('g').each(function() {



        // Example: Put some output in the DOM
        $("#divOutput").append($(this).attr("vnn"));

}) //Here is a colon missing!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...