1

我想使用 javascript 来消费 cdyne 提供的网络天气服务。这是我的代码:

<html>  
<head>  
    <title>weather app</title>  
</head>  
<body>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script language="JavaScript">
    function CallService() {
        var DTO = "{ 'ZIP': '85281' }";

        $.ajax({

            type: "POST",
            url: "wsf.cdyne.com/WeatherWS/Weather.asmx/GetCityWeatherByZIP",
            data: JSON.stringify(DTO),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            processData: true,
            success: function (msg) {       
                alert(msg);
            },
            error: function (req, status, error) {
                alert(req + "# " + status + "@ " + error);
            },
            complete: function (req, status) {
                alert(req + "% " + status);
            }
        });
    }
    CallService();
    </script>
</body>  
</html> 

当我运行代码时,它会在警报中显示 [object Object]#error@ 和 [object Object]%error,这意味着调用了 error: function() 和 complete: function 而不是 success: function()。有没有人使用 javascript 来消费这个天气服务?任何帮助将不胜感激。

4

2 回答 2

5

那里有几个问题:

  1. 您的网址应以http://. 没有它,您拥有的 URL 将相对于代码所在的文档进行解析。

  2. 您在 POST 中发送 JSON。服务不希望收到包含 JSON 的 POST 的可能性非常高。

  3. 您期望从服务返回JSON ,但它似乎以 XML 回复。

  4. 您正在尝试进行跨域调用,但这被Same Origin Policy所阻止,并且您尝试使用的服务似乎不支持Cross Origin Resource Sharing。(当我尝试解决上述问题时,我收到错误消息,指出不允许来自我的来源 [这是] 的跨域请求http:/jsbin.com)。

查看您尝试使用的页面的服务描述,它看起来也不支持JSON-P,这意味着您不能从不同的域使用它。您必须使用服务器端进程来查询它。

于 2013-03-16T16:30:17.203 回答
1

您不能对不同的域进行 ajax 请求,请拨弄http://jsfiddle.net/wAt45/

XMLHttpRequest cannot load 
http://wsf.cdyne.com/WeatherWS/Weather.asmx/GetCityWeatherByZIP. Origin 
http://fiddle.jshell.net is not allowed by Access-Control-Allow-Origin. 
于 2013-03-16T16:27:28.200 回答