代理连接到XML交叉服务器..使用Ajax适用于某些浏览器而不是其他浏览器?代码包括在内

时间:2011-08-14 18:05:11

标签: php javascript xml ajax xml-parsing

好的,首先让我解释一下我在做什么:

我正在尝试连接到http://www.nfl.com/liveupdate/scorestrip/ss.xml以获取xml并解析它当然跨域策略不允许我直接执行此操作。 SOOOO ..

我使用PHP通过代理连接到网站,这非常有效

然后回到我的主HTML文件中,我使用Ajax来解析该XML文件。问题是我的结果好坏参半。例如,在我的macbook pro上使用所有最新的浏览器(Safari,Firefox,Chrome),这不起作用。在我的iPhone上它可以工作。在我的Mac桌面上使用所有最新的浏览器。

任何人都知道为什么?

另外我不知道我在使用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>

以下是使用AJAX的麻烦的HTML文件:

<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

我真的在寻找一种方法来解析它,因为这将是一个很棒的学习经历。顺便说一句,如果它帮助我的Macbook上的所有问题的Firefox告诉我:缺少)在括号中的第12行

如果你非常友好地回答一下noobie可能理解的处理XML的问题,我会非常感激,因为我是新手。

谢谢!

编辑: 添加我的网站链接到此代码: http://allencoded.com/footballxml.htmlhttp://allencoded.com/test3.php

1 个答案:

答案 0 :(得分:0)

如果它不是由某些C&amp; P问题引起的,这可能是原因:

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



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

}) //Here is a colon missing!