在javascript中使用网络天气服务

sha*_*osh 1 javascript service weather

我想用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> 
Run Code Online (Sandbox Code Playgroud)

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

T.J*_*der 5

那里有一些问题:

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

  2. 你在POST中发送JSON.服务不期望接收包含JSON的POST的可能性非常高.

  3. 您期望从服务中恢复 JSON ,但它似乎回复XML.

  4. 您正在尝试进行跨源调用,但是同源策略阻止了这种情况,并且您尝试使用的服务似乎不支持跨源资源共享.(当我尝试修复上述问题时,我收到错误消息,说我的源[不是]允许跨域请求http:/jsbin.com).

查看您尝试使用的页面的服务描述,它看起来也不支持JSON-P,这意味着您无法在其他域中使用它.您将不得不使用服务器端进程来查询它.