2012-04-05 8 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> 

Speichern Sie die Seite oben als HTM auf Ihrem Desktop. Wenn Sie die Seite in einem Browser öffnen, wird die Meldung "Fehler" angezeigt. Aber wenn Sie Fiddler einchecken, ist der Aufruf tatsächlich erfolgreich. In Fiddler können Sie auch sehen, dass die Antwort richtig gibt 32 als Antwort (Der Webservice konvertiert 0 Grad Celsius auf 32 Fahrenheit). Dies funktionierte für eine Weile auf meinem Desktop, dann hörte es plötzlich auf zu arbeiten!Warum funktioniert die Erfolgsmeldung in diesem Jquery Ajax nicht?

Für diejenigen von Ihnen, die Fiddler verwendet haben. Dies ist die Antwort, wie von Fiddler

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> 

Alle Ideen überwacht?

Update: Jungs, die URL http://www.w3schools.com/webservices/tempconvert.asmx/CelsiusToFahrenheit ist eine Web-Methode. Sie können nicht direkt über einen Browser darauf zugreifen. Wenn Sie eine Anfrage über den Browser stellen möchten, verwenden Sie bitte http://www.w3schools.com/webservices/tempconvert.asmx?op=CelsiusToFahrenheit

Bitte antworten Sie nur, wenn Sie Erfahrung mit dem Aufruf eines Webservice mit jquery ajax haben.

+0

Wenn Sie einfach die URL öffnen, erhalten Sie einen Fehler. Vielleicht haben sie das Skript heruntergenommen oder ist das, weil ich versuche, direkt darauf zuzugreifen? – Armatus

+0

Die URL funktioniert für den Ajax-Webservice-Aufruf. Wenn Sie auf die URL durch den Browser zugreifen möchten, ist es http://www.w3schools.com/webservices/tempconvert.asmx?op=CelsiusToFahrenheit – developer747

+0

Es ist [wahrscheinlich klug, w3schools zu vermeiden] (http://w3fools.com/)) – Quentin

Antwort

1

Host die jquery in einem Ordner, in dem die HTML-Datei gehostet wird. Ihr Verweis auf jquery wäre so etwas (anstelle einer Webreferenz). Das ist genug, um über die Implementierung von same origin policy zu kommen.

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

Ihr Beispiel würde nur in Internet Explorer funktionieren. Der Grund, warum es in Firefox und Chrome nicht funktioniert, wie von den anderen Benutzern richtig angegeben, liegt an der same origin policy. Sie erhalten erfolgreich eine Antwort vom Webdienst, der Browser lehnt sie jedoch ab. Fiddler zeigt Ihnen nur den Verkehr zum Browser (und nicht, was der Browser damit macht). Das würde erklären, warum es im Geiger funktioniert.

Sie können auf Wege finden, um die gleiche Ursprungsrichtlinie zu umgehen here.

1

Ihr Ajax-Anruf sollte innerhalb einer Domäne sein. Schauen Sie noch einmal auf die Korrektur wies darauf hin, oberhalb von etwa http://

+0

Wie würden Sie dann eine erfolgreiche Reaktion in Fiddler erklären? – developer747

1

Es schlägt fehl, weil Sie verletzen the Same Origin Policy

Der Browser die Anforderung erfolgreich macht, aber da die Anfrage kommt nicht mit permissions für Ihre Website, die Daten zu sehen , es erlaubt Ihrem JavaScript keinen Zugriff darauf.

Dies wird in der JavaScript-Konsole für Ihren Browser angezeigt. z.B.

XMLHttpRequest kann http://www.w3schools.com/webservices/tempconvert.asmx/CelsiusToFahrenheit nicht laden. Origin http://fiddle.jshell.net ist nicht zulässig von Access-Control-Allow-Origin.

+0

Diese URL ist nicht für den Browser gedacht. Die URL für den Browser ist http://www.w3schools.com/webservices/tempconvert.asmx?op=CelsiusToFahrenheit – developer747

+1

@ developer747 - Wenn die URL nicht für den Browser gedacht ist, warum setzen Sie es in JavaScript und verwenden es als Eingabe für jQuerys '$ .ajax' Funktion? – Quentin

+0

@ developer747 - Ihr Code erstellt eine POST-Anforderung an die URL, sodass die darin enthaltenen Daten im Nachrichtentext und nicht in der Abfragezeichenfolge angezeigt werden. – Quentin

Verwandte Themen