0

json文件:

{
"weather": [
    {
        "location": "G",
        "temp": "9"
    },
    {
        "location": "L",
        "temp": "6"
    },
    {
        "location": "W",
        "temp": "10"
    }
]

}

脚本

<script type="text/javascript">
                    // <![CDATA[
                    $(document).ready(function() {
                        var url =  ".../Json.php";
                        $.getJSON(url + "?callback=?", null, function(weather) {
                            for(i in weather) {
                                location = weather[i].location;
                                temp = weather[i].temp;
                                $("#footer").append(location.text + temp.text+"<hr />");
                            }
                        });
                    });

                    // ]]>
</script>


有人可以告诉我我在哪里做错了吗?那是因为我使用的 json url 属于不同的域吗?我尝试使用 jsonp 但它仍然无法正常工作,....
非常感谢。
P/S:我在哪里得到了Jsonp想法示例,我无法配置服务器,这是被禁止的。

4

2 回答 2

1

问题是您请求 JSONP 并获取 JSON。它只会被解析并默默地忽略,因为没有函数调用来对对象做任何事情。

您的 JSONP 响应应该有一个围绕对象的函数调用,如下所示:

func({
  "weather": [
    {
        "location": "G",
        "temp": "9"
    },
    {
        "location": "L",
        "temp": "6"
    },
    {
        "location": "W",
        "temp": "10"
    }
  ]
});

使用 querystring 参数的值callback作为函数名,而不是func在上面的示例中。


然后当你得到结果时,它不是一个数组,它是一个具有数组属性的对象。使用weather属性获取数组:

for(i in weather.weather)
于 2012-10-02T17:36:12.760 回答
0

你不能使用这个

var url =  ".../Json.php";

您无法调用其他域 url

尽管 XMLHttpRequest API 很强大,但它的使用受到“同源”策略的限制。这意味着您发送 XMLHttpRequest 的 url 的主机名不能与 Web 服务器的主机名不同。

于 2012-10-02T17:31:49.360 回答