2016-07-05 26 views
0

Ich habe ein Problem mit meinem JQuery + Ajax-Aufruf, der eine meiner Web-Service-Methode über Cross-Domain verbrauchen wird. Ich habe versucht, alle möglichen Wege zu erreichen, aber immer noch keinen Erfolg. Bitte hilf mir bei dem, was ich falsch mache. kann ich Webserver für einige Sicherheitseinstellungen konfigurieren müssen? Unten ist mein Code. Bitte lassen Sie es mich wissen, wenn Sie Fragen zu meinem Code haben.So rufen Sie Webservices mit Jquery + Ajax

Ich habe dies in web.config meines Web-Service hinzugefügt.

<system.webServer> 
    <httpProtocol> 
     <customHeaders> 
      <add name="Access-Control-Allow-Origin" value="*" /> 
     </customHeaders> 
    </httpProtocol> 
</system.webServer> 

und diese auf meine Anwendung zeigte

$(document).ready(function() { 
    $.support.cors = true; 
     $.ajax({ 
      url:'http://si-cb01:10000/service1.asmx/GetJsonData', 
      type: 'GET', 
      crossDomain: true, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", // change data type to jsonp 
      success: function (response) { 
       alert(response.d); 
       Result = response.d; 
      }, 
      error: function (response) { 
       alert("Error"); 
      } 
     }); 
    }); 

IE Console diesen Fehler

XMLHttpRequest: Netzwerkfehler 0x80070005, Zugriff verweigert.

Die Google Chrome-Konsole hat diesen Fehler angezeigt.

XMLHttpRequest kann http://si-cb01:10000/service1.asmx/GetJsonData nicht geladen werden. Hier ist si-cb01 nichts anderes als Systemname mit IP 192.168. *. ***

Antwort auf Preflight-Anfrage nicht übergeben Kontrolle der Zugriffskontrolle: Keine 'Access-Control-Allow-Origin'-Header ist auf der angeforderte Ressource.
Herkunft 'http://localhost:xxx' ist daher nicht erlaubt.
Die Antwort hatte HTTP-Statuscode 500

ich das Problem sah auf und es scheint eine fehlende Cross-Origin Resource Sharing (CORS) zu sein, aber ich kann nicht die Lösung für das verstehen.

+0

ich in der Vergangenheit dieses Problem hatte, und die Lösung kam von Zugabe zu meinem Tomcatbediener ein kleines Stück von XML, das entspannt die Beschränkung. Der Fehler rührt von der Tatsache her, dass (scheinbar) Ihre Anwendung in einer Domäne ausgeführt wird, während Sie sich einem Server in einer anderen Domäne nähern. Muss gestehen, ich habe eine ganze Weile gebraucht, um dieses Problem zu lösen. – FDavidov

+0

Ist die Domäne des Web-Service-Servers dieselbe wie die des Web-Servers? – Anson

+1

FYI: "CORS" Politik gilt auch, wenn die Ports unterscheiden, auch wenn die Domain die gleiche ist, was bedeutet, den Aufruf von 'http: // domain: 123 /' von 'http: // domain: 789 /' erfordert auch die ' CORS' eingestellt werden. – xxxmatko

Antwort

2

Um CORS auf IIS fügen Sie Folgendes in der Datei web.config Ihrer Server-Anwendung zu aktivieren:

<configuration> 
<system.webServer> 
    <httpProtocol> 
    <customHeaders> 
     <add name="Access-Control-Allow-Origin" value="*" /> 
    </customHeaders> 
    </httpProtocol> 
</system.webServer> 
</configuration> 

nur zur Erläuterung, wenn Sie einen Dienst aufrufen, die auf verschiedenen Domain gehostet wird (anders als Ihre Anwendung), Browser sendet Preflight-Anfrage (Anfrage mit http OPTION Verb anstelle von POST oder GET) und es wartet auf die Antwort. Die Antwort, die vom Server kommt, bedeutet, dass der Server gemäß der Richtlinie CORS auf die Client-Anfrage antworten kann oder nicht. Sie können JSONP nur verwenden, wenn der Dienst mit JSONP reagiert kann, in diesem Fall die Antwort in etwa so gewickelt ist:

jsonp_callback(<YOUR JSON>) 

wo jsonp_callback ist die globale Funktion, die die JSON bekommen verwendet wird und es an die Ajax zu senden Rückruffunktion.

Um mehr über zu finden, wie CORS Besuch dieser Website http://enable-cors.org/

+0

ziemlich genau die gleiche Antwort. Beat mich dazu :) +1 – naveen

+0

Hm, ich war diesmal schneller. ;) – xxxmatko

0

Dies liegt daran, Ihre ASMX Dienstanforderungen konfiguriert ist, nicht zu ermöglichen, von anderen Domänen aus Sicherheitsgründen zu dienen. Alles, was Sie brauchen, ist dies in web.config Ihres Web-Service hinzuzufügen.

<system.webServer> 
    <httpProtocol> 
     <customHeaders> 
      <add name="Access-Control-Allow-Origin" value="*" /> 
     </customHeaders> 
    </httpProtocol> 
</system.webServer> 

Bitte beachten Sie, dass damit alle Websites auf Ihren Webservice zugreifen können. Wenn Sie nur eine bestimmte Website möchten, dass Ihre Web-Service zugreifen zu können, die Header benutzerdefinierte ändern wie diese

<add name="Access-Control-Allow-Origin" value="http://example-site.com" /> 

Dies wird Ihnen eine detaillierte Vorstellung auf CORS: http://enable-cors.org/

PS: Bitte verzichten auf success und error Callbacks bei der Verwendung von $.ajax, da sie veraltet sind.

Deprecation Hinweis: Die jqXHR.success(), jqXHR.error() und jqXHR.complete() Rückrufe werden als von jQuery 3.0 entfernt. Sie können stattdessen jqXHR.done(), jqXHR.fail() und jqXHR.always() verwenden.

Aktualisieren: Versuchen Sie, diese auch zu setzen.

In web.config

<location path="service1.asmx"> 
    <system.web> 
     <webServices> 
      <protocols> 
       <clear /> 
       <add name="HttpGet" /> 
       <add name="HttpPost" /> 
      </protocols> 
     </webServices> 
    </system.web> 
</location> 

Dekorieren Sie Ihre Methode, wie diese

[ScriptMethod(UseHttpPost = true)] 
public string GetJsonData() 
{ 
    return "Hello World"; 
} 
+0

Hii naveen bereits enthält mein Code alle Funktionen, die Sie in web.config erklärt haben, obwohl er denselben Fehler anzeigt.Wie ich schon sagte, wenn ich jsonp eingegeben habe, ist es durch Fehler "Fehler beim Laden der Ressource: Der Server hat mit einem Status von 500 (Interner Serverfehler) geantwortet" – Lier

+0

CORS wird kein Problem sein, wenn die Webkonfiguration eingestellt ist. Welchen IIS Server benutzen Sie? JSON Anfrage wird in Ordnung sein. Keine Notwendigkeit für JSONP hier. – naveen

+0

IIS7 verwenden wir. und wieder eine kleine Änderung entsprechend der obigen Erklärung in web.cong gemacht und kein Ergebnis gefunden – Lier

Verwandte Themen