2009-12-24 6 views
4

Voici un problème intéressant:ne peut pas consommer ASP.NET Web Service de jQuery

J'ai quelques jQuery qui ressemble à ceci:

$(document).ready(function() { 
    $.ajax({ 
     type: "POST", 
     url: "http://localhost:63056/Service1.asmx/PrintOrderRecieptXml", 
     data: {"CouponCode":"TESTCODE","Subtotal":14.2600,"ShippingTotal":7.5000,"TaxTotal":0.0000,"GrandTotal":21.7600,"OrderItemCollection":[{"Total":14.2600,"Qty":250}]}, 
     dataType: "json", 
     contentType: "application/json", 
     error: function(xhr, msg) { alert(xhr.statusText); } 
    });}); 

Maintenant, le problème que je vais avoir est qu'il est envoyer la demande, mais le service Web ne la traite pas correctement. Dans IE, je reçois une boîte d'alerte avec "Internal Server Error" et avec FireFox je reçois une boîte d'alerte avec rien dedans.

La chose étrange est que lorsque j'utilise IE, je ne reçois pas un événement d'erreur dans mon journal des événements, mais avec firefox je reçois (points de bonus pour comprendre pourquoi c'est):

« Message d'exception: format demande non reconnu pour l'URL se termine de façon inattendue dans «/PrintOrderRecieptXml »

J'ai poussé autour de certains et a découvert que, parfois, vous devez ajouter:

<webServices> 
    <protocols> 
    <add name="HttpGet"/> 
    <add name="HttpPost" /> 
    <add name="HttpPostLocalhost"/> 

    </protocols> 
</webServices> 

pour votre web.config, que je l'ai fait, mais il l'a fait pas d'aide. Ce qui est intéressant, c'est que le service Web fonctionne correctement avec SOAP ou envoie une chaîne de requête, mais pas avec JSON.

Des idées?

Répondre

8

Vous devez donner votre entrée à la propriété data comme une chaîne JSON, et non comme un objet:

$(document).ready(function() { 
    $.ajax({ 
    type: "POST", 
    url: "http://localhost:63056/Service1.asmx/PrintOrderRecieptXml", 
    data: '{"CouponCode":"TESTCODE","Subtotal":14.2600,"ShippingTotal":7.5000,"TaxTotal":0.0000,"GrandTotal":21.7600,"OrderItemCollection":[{"Total":14.2600,"Qty":250}]}', 
    dataType: "json", 
    contentType: "application/json", 
    error: function(xhr, msg) { alert(xhr.statusText); } 
});}); 

Using jQuery to Consume ASP.NET JSON Web Services a une bonne explication des exigences lorsque vous parlez à ASP Services Web .Net.

+0

+1 Battez-moi !! –

+0

Cela semble être le bon chemin. Cependant, ne fonctionne toujours pas dans Firefox. Fonctionne très bien dans IE. – James

+0

Comment cela échoue-t-il dans Firefox maintenant? Voyez-vous la demande au serveur? La requête est-elle traitée correctement par ASP.Net? Est-ce que cela touche votre côté client du gestionnaire 'error'? – Annabelle

3

Douglas a raison - vous devez formater les données sous forme de chaîne. Assurez-vous de lire tous les messages sur le blog qu'il vous a lié. Encosia est une excellente ressource pour Ajax et Asp.Net.

Questions connexes