Wie Dekodieren von XML-Antwort von jQuery $.ajax-request in Firefox
Ich versuche, erstellen Sie eine ajax-Anfrage an einen WebService, der die Daten liefert einige angegebenen Parameter in XML. Dies scheint gut zu funktionieren im IE, aber Firefox kann nicht decodieren die Antwort. Ich kann die Reaktion erfolgreich in Fiddler nach der Entschlüsselung auch. Hier ist der code:
$(function() {
$.ajax({
type: "GET",
url: 'http:/localhost/webservice.asmx/GetTags?groupId=10',
contentType: "text/xml; charset=utf-8",
dataType: "xml",
success: function(response) {
$('#result').html('success',response);
$(response).find("string").each(function() {
$('#result').append($(this).text());
});
},
error: function(response) {
$('#result').html('failure',response);
}
});
});
Gibt es eine Möglichkeit, um anzugeben, dass die Antwort erst entschlüsselt werden muss? Oder irgendeine andere Möglichkeit, damit es funktioniert?
EDIT:
@Nikki9696 - es ist nicht als JSON codiert, wie die Daten zurückgegeben werden, die in XML.
@Oleg - Das XML-Beispieldatei kann ich im browser sehen, wenn der Zugriff auf den webservice über eine URL ist wie folgt:
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
<string>tag 1</string>
<string>tag 2</string>
<string>tag 3</string>
</ArrayOfString>
Den fiddler in TextView zurückgibt �
und eine Nachricht
"- Antwort kodiert und können müssen
decodiert werden vor der Inspektion. Klicken Sie auf
hier zu verwandeln."
Einmal angeklickt, zeigt es die gleichen XML. Ich abschalten Komprimierung dynamischer Inhalte in der IIS dann die XML-Daten sichtbar im fiddler sofort, aber FF noch nicht fertig, so dass die Regeln der Kompression.
Ich spielte mit dem Skript ein bisschen, scheint wie jQuery können Standard-oder vermute, dass einige Parameter, damit Datentyp, zum Beispiel, ist nicht zwingend. Mit diesen Einstellungen bekomme ich eine Erfolgsmeldung, aber es immer noch nicht wissen, was Sie mit den Daten machen. Ich habe versucht, Datentyp "jsonp" wie vorgeschlagen in einigen SS-thread (kann ihn nicht finden im moment, wird link es, wenn ich tun) und der Fehler änderungen missing ; before statement
ich denke, weil es kein JSON-Objekt, sondern XML. Gibt es eine Möglichkeit, einzustellen, webservice, um wieder eine JSON statt?
EDIT 2: ich habe aktualisiert url
zu reflektieren, was eigentlich passiert ist. Leider verpasste ich es heraus, machte es für jedermann unmöglich, es zu lokalisieren.
- Wenn Sie sagen, "entschlüsseln",, meinst du es ist JSON codiert?
- konnten Sie die xml-Daten, die Sie erhalten, von den web-Dienst zurück und was sehen Sie in den Fiddler?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weil Sie einen relativen URL-wie
'/webservice.asmx/GetTags?groupId=10'
Sie hatte kein problem mit einer anderen domain. Es scheint mir,, dass Sie einfach fix ein litle Ihren JavaScript-code. Z. B. der folgende codefunktioniert in Internet Explorer, Firefox und Google Chrome. Wenn Sie brauchen, ich könnte die post die URL, wo könnten Sie download ganze Arbeit Visual Studio 2010 Projekt.
AKTUALISIERT: zurück JSON anstelle von XML-Daten aus der web-Methode, die Sie ersetzen können
[ScriptMethod(UseHttpGet = true)]
zu den[ScriptMethod (UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
Attribut (in .NET 4.0 Sie können das gleiche tun in verschiedenen anderen Möglichkeiten), und ändern Sie die JavaScript-code, der dem folgendenjQuery.html()
in eine falsche Richtung (siehe api.jquery.com/html):$('#result').html('success',response);
. Siehe korrigierte version in meiner Antwort.Die kurze Antwort ist: ich habe versucht, den Aufruf von einer anderen domain zu meinem webservice.
Hier sind einige mehr details:
In Firebug auf der Suche auf der Registerkarte "XML", bemerkte ich, dass der zurückgegebene Fehler war
XML Parsing Error: no element found Location: moz-nullprincipal:{757cb587-20da-4d2f-bf80-e3b915a234d4} Line Number 1, Column 1:
, so sah ich für diese bestimmte Nachricht, und stolperte über jemanden mit dem gleichen Problem http://forum.jquery.com/topic/jquery-ajax-and-xml-issues-no-element-found. Hier ist der Teil, der mein problem gelöst:Es fiel mir auf, dass der Grund, funktionierte es im IE ist, dass das erste mal fragte er mich, ob ich erlauben würde, unsicher sein rufen (oder so), und es muss bezogen auf einen ajax-Aufruf auf eine andere domain. FF nie dazu aufgefordert mich über Sie und wahrscheinlich deaktiviert die call-by-default.
Machen es cross-domain kompatibel ist ein Thema für einen anderen Tag, jetzt ist es tut alles was ich brauche.