2011-10-10 8 views
0

J'appelle un service Web .NET à partir d'un fichier jQuery qui ne fait pas partie du projet. Chaque fois que j'appelle le service, il est dit OPTIONS /HOCWebService.asmx/HelloWorld et ne retourne rien. Que se passe-t-il? Dans le web.config, j'ai spécifié que le service web est autorisé httpGet et httpPost.Appel du service Web .NET à partir de jQuery

MISE À JOUR 1:

$.ajax(

    { 
     type: "POST", 
     url: "http://127.0.0.1:8080/HOCWebService.asmx/HelloWorld", 
     data: "{}", 
     dataType: "json", 
     contentType: "application/json", 
     success: function (response) { 

      alert(response.d); 

      var categories = $.evalJSON(response.d); 


      for (i = 0; i < categories.length; i++) { 

       var span = $(document.createElement("span")); 
       $(span).addClass("ui-li-count"); 
       $(span).html(categories[i].Count); 
       var li = $(document.createElement("li")); 
       var anchor = $(document.createElement("a")); 
       $(anchor).attr("href", "/Home/detail/"+categories[i].Id); 
       $(anchor).html(categories[i].Title); 

       $(li).append(anchor); 
       $(li).append(span); 

       //  $("#categoriesListView").append('<li><a href="/Home/detail/' + categories[i].Id + '">' + categories[i].Title + '</a></li>'); 

       $("#categoriesListView").append(li); 

       // $(span).text(categories[i].Count); 

      } 

      $("#categoriesListView").listview('refresh'); 

     } 
    } 

    ); 
+0

pouvez-vous ajouter du code pour $ .ajax() appel? –

+0

@StevendeSalas Le code a été ajouté! – azamsharp

Répondre

2

L'implémentation par défaut des fichiers ASMX dans .NET Framework signifie que vous traitez avec les services Web SOAP et ainsi enverrez et recevoir XML wrapped in a SOAP envelope (et non JSON).

Essayez:

$.ajax({ 
      // 1. Loose the 'HelloWorld' from the URL 
      url: "http://127.0.0.1:8080/HOCWebService.asmx", 
      type: 'POST', 
      async: false, 
      dataType: 'xml', 
      // 2. But add it as a HTTP Header called 'SOAPAction' 
      headers: { 
      SOAPAction: "http://www.tempuri.org/HelloWorld" 
      }, 
      contentType: 'text/xml; charset="utf-8"', 
      // 3. The data sent to the server must be a SOAP XML Envelope 
      data: '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">' + 
        '<soap:Body>' + 
         '<HelloWorld xmlns="http://www.tempuri.org/" />' + 
        '</soap:Body>' + 
       '</soap:Envelope>', 
      sucess: function(response) { 
       alert(response.responseText); 
       // Completion logic goes here 
      } 
    }); 

S'il vous plaît noter que dans le cadre de la mise en œuvre ci-dessus vous avez besoin d'un en-tête HTTP POST appelé « SOAPAction » correspondant à la méthode que vous appelez, sinon il ne fonctionnera pas:

headers: { 
    SOAPAction: "http://www.tempuri.org/HelloWorld" 
}, 

signifie que la requête POST comprendra le lastline ci-dessous:

POST /HOCWebService.asmx HTTP/1.1 
Host: 127.0.0.1:8080 
Content-Type: application/soap+xml; charset=utf-8 
Content-Length: 453 
SOAPAction: "http://www.tempuri.org/HelloWorld" 

http://www.tempuri.org/ est l'espace de noms par défaut utilisé par Microsoft lorsque vous créez un nouveau service ASMX. N'hésitez pas à le mettre à jour dans l'espace de noms que vous utilisez dans votre implémentation.

SUGGESTION:

Si vous devez envoyer JSON en arrière et en avant de votre application, puis-je vous suggère d'utiliser un gestionnaire générique (fichier ASHX) en utilisant something similar to this approach.

Questions connexes