1

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 が表示されます。これは、success: function() ではなく error: function() と complete: function が呼び出されたことを意味します。この天気予報サービスを利用するために JavaScript を使用した人はいますか? どんな助けでも大歓迎です。

4

2 に答える 2

5

そこにはいくつかの問題があります:

  1. URL は で始まる必要があり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 に答える