2012-04-05 9 views
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を正しく与えることもわかります(Webserviceは0℃から32 Farenheitに変換されます)。これは私のデスクトップでしばらくの間働いていた後、突然動作を停止しました!このjquery ajaxで成功メッセージが機能しないのはなぜですか?

フィドラーを使用している方にお勧めします。これは、フィドラーから監視された応答です

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> 

アイデアはありますか?

更新:男、URL http://www.w3schools.com/webservices/tempconvert.asmx/CelsiusToFahrenheitはWebメソッドです。ブラウザから直接アクセスすることはできません。ブラウザでリクエストしたい場合は、http://www.w3schools.com/webservices/tempconvert.asmx?op=CelsiusToFahrenheit

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

+0

通常、URLを開くだけでエラーが発生します。おそらく彼らはスクリプトをダウンしたか、それは私が直接アクセスしようとしているからでしょうか? – Armatus

+0

urlはajax webservice呼び出しのために機能します。ブラウザからURLにアクセスしたい場合はhttp://www.w3schools.com/webservices/tempconvert.asmx?op=CelsiusToFahrenheit – developer747

+0

w3schoolsを避けるのが賢明でしょうか(http://w3fools.com/ ) – Quentin

答えて

1

htmlファイルがホストされているフォルダ内でjqueryをホストします。 jqueryへの参照は、(Web参照ではなく)このようなものになります。それは、つまりsame origin policyの実装を乗り越えるには十分です。

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

この例はInternet Explorerでのみ動作します。他のユーザーによって正しく指摘されているように、FirefoxとChromeで動作しない理由は、 same origin policyです。あなたは正常にWebサービスからの応答を取得しますが、ブラウザはそれを拒否します。 Fiddlerはあなたにブラウザへのトラフィックを表示します(そしてブラウザがブラウザで何をしているのかはわかりません)。それはなぜフィドラーで動作するように思われるのでしょうか。

同じ出所ポリシーhereを知る方法があります。

1

あなたのajax呼び出しはドメイン内にある必要があります。再び修正を見て約http://

+0

次に、フィドラーで検出された成功した応答を説明しますか? – developer747

1

あなたはブラウザが正常に要求を行うthe Same Origin Policy

に違反しているので、それが失敗している上に指摘したが、以降の要求は、データを表示するには、サイトのpermissionsが付属していません。 、それはJavaScriptへのアクセスを許可しません。

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

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

+0

そのURLはブラウザ用ではありません。ブラウザのURLはhttp://www.w3schools.com/webservices/tempconvert.asmx?op=CelsiusToFahrenheitです。 – developer747

+1

@ developer747 - URLがブラウザ用でない場合は、なぜJavaScriptに入れて使用していますか? jQueryの '$ .ajax'関数への入力として? – Quentin

+0

@ developer747 - あなたのコードはURLにPOSTリクエストをしているので、その中のデータはクエリ文字列ではなくメッセージ本体に表示されます。 – Quentin

関連する問題