1

J'ai un gros problème dans jQuery.ajax appel. J'appelle le service Web chaque fois que je clique sur le bouton de mise à jour. J'ai une classe de service Web distincte, dans laquelle se composent de quelques méthodes. Lorsque j'appelle la méthode de service Web, j'ai fait le traitement d'erreur et consigner l'information d'erreur dans la DB après que je dois substituer le "ex" qui signifie l'objet d'erreur à XMLHttpRequest. Est-il possible d'affecter le SqlException à l'objet ajax (xhr) dans VB.NET? S'il vous plaît aidez-moi c'est beaucoup plus utile pour moi.Obtenir xhr objet dans vb.net tandis que l'appel ajax échoue

Répondre

0

Oui, c'est possible! J'essaie de le décrire dans VB.NET (surtout j'utilise C#, mais j'espère que je ne ferai pas d'erreurs de syntaxe). Laissez-nous, nous avons un service Web

<WebMethod()> _ 
<ScriptMethodAttribute(ResponseFormat:=ResponseFormat.Json, UseHttpGet:=True)> _ 
Public Function GetData(ByVal Age As Integer) As String 
If Age <= 0 Then 
    Throw(New ArgumentException("The parameter age must be positive.")) 
End If 
'... some code 
End Function 

Le même code en C# ressembler

[WebMethod] 
[ScriptMethod (UseHttpGet=true)] 
public string GetData(int age) 
{ 
    if (age <= 0) 
     throw new ArgumentException("The parameter age must be positive."); 
    // some code 
} 

En cas d'entrée négative d'âge à l'exception ArgumentException sera jeté (tout ce que je lui explique rester la même chose pour une autre exception comme SqlException).

Maintenant vous avez un code JavaScript qui utilise jQuery.ajax pour appeler le service. Ensuite, vous pouvez étendre le code pour soutenir la gestion des exceptions de la manière suivante:

$.ajax({ 
    type: "GET", 
    url: "MyWebService.asmx/GetData", 
    data: {age: -5}, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(data, textStatus, xhr) { 
     // use the data 
    }, 
    error: function(xhr, textStatus, ex) { 
     var response = xhr.responseText; 
     if (response.length > 11 && response.substr(0, 11) === '{"Message":' && 
      response.charAt(response.length-1) === '}') { 

      var exInfo = JSON.parse(response); 
      var text = "Message=" + exInfo.Message + "\r\n" + 
         "Exception: " + exInfo.ExceptionType; 
         // + exInfo.StackTrace; 
      alert(text); 
     } else { 
      alert("error"); 
     } 
    } 
}); 

En cas d'exception être jetés, nous recevons des informations sur l'erreur au format JSON. Nous deserialize à l'objet ayant Message, ExceptionType et StackTrace propriété et affiche un message d'erreur comme suit

Message: The parameter age must be positive. 
Exception: System.ArgumentException 

Dans une application réelle, vous probablement jamais affiché la valeur de la propriété StackTrace. Les informations les plus importantes sont dans le Message: le texte d'exception et dans ExceptionType: le nom de l'exception (comme System.ArgumentException ou System.Data.SqlClient.SqlException).

+0

Pas de chance. Changer l'URL n'a pas changé l'erreur, et avec votre code d'erreur, je reçois juste une alerte qui dit "erreur". Mais merci! –

+0

@Oren A: Le code dans ma réponse ici est simplifié pour afficher uniquement les détails de l'erreur en cas d'exception levée par le service Web. L'erreur que vous avez décrite dans http://stackoverflow.com/questions/3650561/calling-simple-web-service-asmx-file-from-ajax-and-jquery-using-json-parse-e a une tout autre nature. Vous avez textStatus = ** parseerror **. Donc vous devriez d'abord montrer 'xhr.responseText' avec' alert (xhr.responseText); ' – Oleg

Questions connexes