0
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>

<script src="http://code.jquery.com/jquery-1.7.2.min.js" type="text/javascript"></script>

<script type="text/javascript">

    $(document).ready(function () {

        var Celcius = 0;
        $.ajax({
            type: "POST",
            url: "http:\//www.w3schools.com/webservices/tempconvert.asmx/CelsiusToFahrenheit",
            contentType: "application/x-www-form-urlencoded",
            data: 'Celsius=0',
            dataType: "text/html",
            success: function (msg) {
                alert(msg);
            },
            error: function (xhr, msg) {
                alert('fail');
            }
        });

    });

</script>
</head>
<body>

</body>
</html>

上記のページを.htmとしてデスクトップに保存します。ブラウザでページを開くと、「失敗」メッセージが表示されます。しかし、フィドラーをチェックインすると、呼び出しは実際に成功しました。フィドラーでは、応答が答えとして32を正しく与えることもわかります(Webサービスは摂氏0度を華氏32度に変換しました)。これはしばらくの間私のデスクトップで機能しましたが、突然機能しなくなりました。

フィドラーを使用したことがある方のために。これはフィドラーから監視された応答です

HTTP/1.1 200 OK
Date: Thu, 05 Apr 2012 23:18:10 GMT
Server: Microsoft-IIS/6.0
MicrosoftOfficeWebServer: 5.0_Pub
X-Powered-By: ASP.NET
X-AspNet-Version: 4.0.30319
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Content-Length: 87

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">32</string>

何か案は?

更新:みんな、URLhttp ://www.w3schools.com/webservices/tempconvert.asmx/CelsiusToFahrenheitはWebメソッドです。ブラウザから直接アクセスすることはできません。ブラウザを介してリクエストを行う場合は、http://www.w3schools.com/webservices/tempconvert.asmx? op=CelsiusToFahrenheitを使用します。

jqueryajaxを使用してWebサービスを呼び出した経験がある場合にのみ返信してください。

4

3 に答える 3

1

ajax呼び出しはドメイン内にある必要があります。上で指摘した修正をもう一度見てくださいhttp://

于 2012-04-05T23:01:33.293 に答える
1

同一生成元ポリシーに違反しているため、失敗しています

ブラウザはリクエストを正常に実行しますが、リクエストにはデータを表示するためのサイトへのアクセス許可が含まれていないため、JavaScriptによるアクセスは許可されません。

これは、ブラウザのJavaScriptコンソールに表示されます。例えば

XMLHttpRequestはロードできませんhttp://www.w3schools.com/webservices/tempconvert.asmx/CelsiusToFahrenheit。Originhttp://fiddle.jshell.netはAccess-Control-Allow-Originでは許可されていません。

于 2012-04-05T23:03:11.803 に答える
1

htmlファイルがホストされているフォルダー内でjqueryをホストします。jqueryへの参照は、(Web参照ではなく)次のようになります。これは、同一生成元ポリシーの実装を乗り越えるのに十分です。

 <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>

あなたの例はInternetExplorerでのみ機能します。他のユーザーが正しく指摘しているように、FirefoxとChromeで機能しない理由は、 同一生成元ポリシーによるものです。Webサービスからの応答は正常に取得されますが、ブラウザーはそれを拒否します。Fiddlerは、ブラウザーへのトラフィックを表示するだけです(ブラウザーがそれを使用して行うことではありません)。それはなぜそれがフィドラーで機能するように見えるのかを説明するでしょう。

同一生成元ポリシーを回避する方法については、こちらをご覧ください。

于 2012-04-07T21:00:50.397 に答える