2009-04-24 20 views
1

Ich habe viel über jquery gelesen und habe einen Webservice, wo ich eine FirmenID in den echten Firmennamen umwandele. Jetzt möchte ich diesen Webservice mit jquery oder javascript aufrufen. Der Webservice ist auf dem Host http://webservice/service.asmx de Ich arbeite an http://tlmos. Ich arbeite nicht und ich bekomme immer einen FehlerFehler beim Aufruf von Webservice mit jquery

Hier mein Code:

<script type="text/javascript" src="http://kmosvi24/_layouts/jquery-1.3.2.min.js"></script> 

<script type="text/javascript"> 
var test = "KBEACDNV"; 
$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: "http://webservice/service.asmx/getCompanyByCompanyID", 
    data: "{'sCompanyID:' + 'test'}",    
    dataType: "json", 
    succes:function(response){  alert("good"); }, 
    error: function(response) { alert("Uh oh"); }, 
complete: function(response) {  alert("" + response); } 
}); 

</script> 

Kann mir jemand helfen?

thx

Antwort

6

Umm .. Dinkel Sie Erfolg falsch auf Linie 11

.. und Sie wahrscheinlich Ihre Daten als

data: "sCompanyID=test" 

Werfen Sie einen kurzen Durchlauf durch die jQuery API page on this one zu formatieren, um zu überprüfen, Sie übergeben die Parameter, die Ihr Service erwartet. Es sieht so aus, als ob Sie ein SOAP-Paket mit einem ASMX-Dienst erwarten, und jQuery ist besser geeignet, um einen aus einer ASHX-Datei oder einem WCF-Dienst generierten Restful-Service zu erreichen.

0

Um Ihre Web-Services von Jquery aus auszuführen, sollten Sie entweder WCF oder nur die üblichen Webdienste verwenden. Sie sollten jedoch [ScriptMethod] zu Ihrer Dienstmethode und [ScriptService] zu Ihrer Webservice-Beschreibung hinzufügen.

Wow wow gerade bemerkt, dass Sie versuchen, den Dienst von einem Host zum anderen zu rufen ... das wird nicht funktionieren. Der Dienst sollte in derselben Domäne gehostet werden wie die Seite, von der aus er aufgerufen wird.

als Antwort auf Jeffs Antwort, Daten korrekt zu formatieren Daten: {key: „Wert“}

+0

Vereinbart über die Formatierung von Daten, habe ich nicht bemerkt, dass der Datentyp JSON war. –

1

Ich glaube nicht, dass Sie die Datenparameter direkt verwenden, in der Regel ist es ein Paar Schlüssel-Wert wie:

data: {sCompanyID: 'test'} 

ich glaube, dass sie so, wie Sie es zu http://webservice/service.asmx/getCompanyByCompanyID?sCompanyID:blah

auch sind nicht .NET Web-Services SOAP zu schreiben in jQuery versucht führt verwenden? Ich glaube nicht, dass jQuery das analysieren kann ...

bearbeiten: Vergesst nicht, dass Sie diese als JSON-Daten übergeben wurden. Danke Kommentatoren!

+0

Die Daten werden korrekt übergeben, es wird eine JSON-Zeichenfolge und keine JavaScript-Variable erwartet. –

+0

jquery wird es automatisch in eine Abfragezeichenfolge codieren. Sie können eine JSON-Zeichenkette an eine asmx-Methode senden, die [ScriptService] und [ScriptMethod] hat –

+0

Ah habe nicht gemerkt, dass es das tun könnte! Aktualisierte Antwort –

1

Sie können keine AJAX-Anrufe an andere Hosts als Ihre eigenen tätigen. Wenn Sie dies wirklich tun müssen, rufen Sie Ihren eigenen Server an und verwenden Sie einen einfachen Proxy, um auf die von Ihnen benötigte Domain umzuleiten.

Man könnte dies durch die Verwendung eines Proxypass-Richtlinie in Ihrem Webserver zum Beispiel tun:

ProxyPass   /service/ http://webservice/service.asmx 
ProxyPassReverse /service/ http://webservice/service.asmx 

Dann können Sie eine AJAX-Anfrage/Service Ausgabe/getCompanyByCompanyID und es wird auf die richtige URL proxied werden.

+0

Wo füge ich das zu meinem Skript hinzu? – idsis

+0

Dies ist eine Apache-Konfigurationsoption. Sie können dies nicht erreichen, indem Sie nur die Client-Seite ändern. Sie benötigen einen Proxy auf dem Server in Ihrer eigenen Domäne. –

2

Wie einige andere Personen darauf hingewiesen haben, können Sie keinen Webservice in einer anderen Domäne aufrufen, da Sie ASP.NET verwenden, können Sie einen unformatierten HTTP-Handler schreiben (normalerweise mit einer .ashx-Erweiterung) Server.), Die Sie

so in Ihrer Ashx Datei auf Ihrem "Timos" Server platzieren würden Sie etwas entlang der Linien von ...

public void ProcessRequest (HttpContext context) 
{ 

    XmlDocument wsResponse = new XmlDocument(); 
    string url = "http://webservice/service.asmx/getCompanyByCompanyID?CompanyID=" 
    context.Request.Form["CompanyID"].ToString() 
    wsResponse.Load(url); 
    string XMLDocument = wsResponse.InnerXml;   
    context.Response.ContentType = "text/xml";   
    context.Response.Write(XMLDocument); 

} 

this helps schreiben.

2

Sie können eine Anforderung an einen anderen Server senden, aber nur, wenn der Aufruf GET verwendet. Da Sie sowieso nur nachschlagen müssen, sollte eine GET-Anfrage in Ordnung sein.

+0

Ich würde bemerken, dass Sie das Ergebnis nur verarbeiten können, wenn das Ergebnis eine JS-Funktion ist. – cgp

0

Mit jQuery Ajax Requests Sie müssen das folgende Format verwenden, wenn die Variablen definieren, die in der Anfrage gesendet werden:

data: "variableName=variableContent", 

Sie schrieb:

data: "{'sCompanyID:' + 'test'}" 

Das wird nicht funktionieren für zwei Gründe:
- Sie haben geschweifte Klammern eingeschlossen, die nicht dort sein müssen.
- Sie haben ein Semikolon verwendet, ":" anstelle eines Gleichheitszeichens, "=".

Solange Sie diese ändern, sollte es funktionieren.

P.S Ich habe gerade erst gemerkt, dass Jeff Fritz dir schon die richtige Antwort gegeben hat. Seine Antwort ist genau richtig!

Verwandte Themen