2009-07-27 4 views
1

Je trouve de nombreuses "solutions" à ce problème apparemment courant, mais hélas, aucune ne semble fonctionner pour moi - bien sûr. J'ai du code jQuery qui essaie de publier sur un service Web ASP.NET 3.5. Le service web est censé retourner un peu de JSON. Je reçois 501 erreurs internes de serveur avec le code ci-dessous, mais selon les solutions trouvées en ligne, c'est comment il est censé être! La fonction d'erreur dans le code jquery affiche un parsererreur. Si je change la façon dont les paramètres de données sont passés au service ("userID=3456"), et supprimez la propriété contentType et changez le dataType en "texte", alors aucune erreur, mais il renvoie le JSON dans une chaîne XML.Impossible de récupérer un objet JSON à partir du serveur Web ASP.NET en utilisant jQuery

Voici mon code jQuery:

$.ajax({ 
     type: "POST", 
     url: "mywebservice.asmx/Initialize", 
     data: "{'userID': '3456'}", 
     dataType: "json", 
     contentType: "application/json; charset=utf-8", 
     success: function(result) { 
      alert("success"); 
     }, 
     error: function(request, status, errorThrown) { 
      alert(status); 
      alert(errorThrown); 
     } 
}); 

Voici mon code ASP.NET:

<WebMethod()> _ 
Public Function Initialize(ByVal userID As Integer) As String 
    Dim scormInstance As New CMI(userID) 
    Return scormInstance.ToJsonString 
End Function 

Voici la requête HTTP et la réponse dans mon navigateur (Firefox 3.5.1)

http://localhost/cognition/webservices/cognitionapi.asmx/Initialize 

POST /cognition/webservices/cognitionapi.asmx/Initialize HTTP/1.1 
Host: localhost 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1 (.NET CLR 3.5.30729) 
Accept: application/json, text/javascript, */* 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 300 
Connection: keep-alive 
Content-Type: application/json; charset=utf-8 
X-Requested-With: XMLHttpRequest 
Referer: http://localhost/cognition/scorm-test2.html 
Content-Length: 20 
Cookie: RadEditorGlobalSerializeCookie=[_ctl0__ctl0__ctl0_Content_mainContent_mainContent_txtSpecialInstructionsModules]-[]#[_ctl0__ctl0__ctl0_Content_mainContent_mainContent_txtSpecialInstructionsToolbars]-[]# 
Pragma: no-cache 
Cache-Control: no-cache 
{"userID":"1234"} 

HTTP/1.x 500 Internal Server Error 
Cache-Control: private 
Content-Length: 4956 
Content-Type: text/html; charset=utf-8 
Server: Microsoft-IIS/7.0 
X-AspNet-Version: 2.0.50727 
X-Powered-By: ASP.NET 
Date: Mon, 27 Jul 2009 21:24:41 GMT 

Des idées sur ce que je fais exactement mal ???? !!!!?

Merci!

Répondre

2

Après avoir regardé un code j'ai qui travaille j'ai trouvé cette décoration sur la fonction:

[WebMethod(), ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = false)] 

aussi im postdata passant est au format JSON, à savoir:

var postdata = "{'variable':'value'}"; 
+0

J'ai essayé et pas de chance. –

+0

J'ai dû créer un httpmodule personnalisé qui placerait la réponse du webservice dans un appel de méthode (JSONP) afin qu'il fonctionne sur plusieurs domaines. –

0

Votre classe possède-t-elle l'attribut ScriptService? En C#:

[System.Web.Script.Services.ScriptService] 
public class MyWebServiceClass 
{ 
    ... 
} 

Sinon, utilisez Firebug pour vérifier les détails de l'erreur et de leur fournir ici.

1

Avez-vous essayé d'utiliser un débogueur et de voir si cela arrive à attraper quelque chose? Je crois que certaines raisons pour les échecs d'appel ajax apparaîtront quand vous avez un débogueur attaché mais vous n'obtenez pas beaucoup d'informations utiles sur la page elle-même.

Le journal des événements peut également contenir quelque chose d'utile.

0

Votre service Web attend un paramètre int, vous devez donc envoyer une valeur numérique. Supprimez les citations de 3456. Consultez json.org pour les formats de type.

Questions connexes