在javascript中使用web天气服务

在javascript中使用web天气服务,javascript,service,weather,Javascript,Service,Weather,我想使用javascript来使用cdyne提供的web天气服务。 这是我的代码: <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.

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

<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来使用此气象服务?
任何帮助都将不胜感激

您不能对不同的域执行ajax请求,fiddle


您不能对不同的域执行ajax请求,fiddle


这里有几个问题:

您的URL应以http:///开头。没有它,您的URL将相对于代码所在的文档进行解析

你在邮件中发送了JSON。服务不希望收到包含JSON的帖子的可能性非常高

您期望从服务返回JSON,但它似乎用XML回复

您正在尝试进行跨源呼叫,但被阻止,并且您尝试使用的服务似乎不支持。当我尝试修复上面的问题时,我得到一个错误,即不允许从我的来源[http:/jsbin.com]发出跨域请求


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

这里有几个问题:

您的URL应以http:///开头。没有它,您的URL将相对于代码所在的文档进行解析

你在邮件中发送了JSON。服务不希望收到包含JSON的帖子的可能性非常高

您期望从服务返回JSON,但它似乎用XML回复

您正在尝试进行跨源呼叫,但被阻止,并且您尝试使用的服务似乎不支持。当我尝试修复上面的问题时,我得到一个错误,即不允许从我的来源[http:/jsbin.com]发出跨域请求


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

我尝试了URL,它似乎返回了XML。您确定URL是正确的并且应该返回JSON数据吗?是一个有人为使用JavaScript中的cdyne wheather服务而编写的库。如果你想使用JSON,这是一个天气API服务列表,包括一些支持JSON的服务。@scott.korin:是的,我也找到了这个库,但它必须用于桌面非浏览器使用,如Windows 8小部件,因为该服务显然不支持CORS.@scott.korin谢谢您的帮助。我尝试了URL,它似乎返回了XML。您确定URL是正确的并且应该返回JSON数据吗?是一个有人为使用JavaScript中的cdyne wheather服务而编写的库。如果你想使用JSON,这是一个天气API服务列表,包括一些支持JSON的服务。@scott.korin:是的,我也找到了这个库,但它必须用于桌面非浏览器使用,如Windows 8小部件,因为该服务显然不支持CORS。@scott.korin谢谢你的帮助。那么我应该使用XML进行查询并解析返回的XML吗?@shaosh:正如我所说的,我认为你根本无法直接从浏览器中执行此操作,由于SOP和您尝试使用的服务似乎不支持CORS或JSON-P这一事实,因此您需要从服务器执行查询,当然,由于结果是XML,因此要使用它,您必须解析它。您可能需要对自己的服务器进行查询,然后服务器从另一端获取数据并将其发送回。当然,也可以使用支持CORS或JSON-P的替代服务。非常感谢您的解释。@shaosh:不用担心,很高兴能帮上忙!那么,我应该使用XML进行查询并解析返回的XML吗?@shaosh:正如我所说的,我认为您根本无法直接从浏览器进行查询,因为SOP和您尝试使用的服务似乎不支持CORS或JSON-P。因此,您需要从服务器进行查询,当然,由于结果是XML,要使用它,您必须解析它。您可能需要对自己的服务器进行查询,然后服务器从另一端获取数据并将其发送回。当然,也可以使用支持CORS或JSON-P的替代服务。非常感谢您的解释。@shaosh:不用担心,很高兴能帮上忙!这是我第一次使用ajax。所以我不应该在这里使用ajax?这是我第一次使用ajax。所以我不应该在这里使用ajax?
XMLHttpRequest cannot load 
http://wsf.cdyne.com/WeatherWS/Weather.asmx/GetCityWeatherByZIP. Origin 
http://fiddle.jshell.net is not allowed by Access-Control-Allow-Origin.