2010-01-28 11 views
1

J'essaye d'appeler une méthode statique dans C# en utilisant jQuery Ajax. J'ai déjà essayé mais maintenant ça ne marche pas. Je reçois le statut d'erreur comme 200 Ok. Voici mon code:jQuery Ajax dans asp.net

$("#btnSample").live("click", function() 
    { 
     $.ajax({ 
       type : "POST" 
      , data : {} 
      , url : "jQueryAjax.aspx/SampleMethod" 
      , contentType : "application/json; charset=utf-8" 
      , dataType : "json" 
      , success : function(msg) 
      { 
       alert("Success : "+msg); 
      } 
      , error : function(error) 
      { 
       $("#lblSample").text(error.status); 
      } 
     }); 
    }); 

Mon code côté serveur est:

[WebMethod] 
public static string SampleMethod() 
{ 
    return "jQuery is Super"; 
} 

ASPX pour Button:

<input type="button" id="btnSample" runat="server" value="Show What" /> 
+0

Y at-il une exception se produit dans votre page C#? – rahul

+0

Je pense que ce pourrait être une bonne idée de donner plus de détails sur le côté serveur. –

+0

Il n'y a aucune exception. Le statut de l'erreur et l'erreur statusText sont 200 et Ok respectivement. Lorsque le bouton est cliqué, page_load est déclenché, mais la méthode statique (SampleMethod) n'est pas déclenchée. – superachu

Répondre

2

J'ai recréé votre code de mon côté.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 


    <script src="Js/jquery-1.4.1.min.js" type="text/javascript"></script> 

    <script type="text/javascript"> 
     $("#btnSample").live("click", function() { 
      $.ajax({ 
       type: "POST" 
      , data: {} 
      , url: "Default.aspx/SampleMethod" 
      , contentType: "application/json; charset=utf-8" 
      , dataType: "json" 
      , success: function(msg) { 
       alert("Success : " + msg.d); 
      } 
      , error: function(error) { 
       $("#lblSample").text(error.status); 
      } 
      }); 
     }); 

    </script> 

</head> 
<body> 
    <form id="form1" runat="server"> 
    <asp:Label runat="server" ID="lblSample"></asp:Label> 
    <input type="button" id="btnSample" runat="server" value="Show What" /> 
    </form> 
</body> 
</html> 

C'est un copier-coller. Je l'ai testé dans IE8 et ça marche bien.

Le seul changement que je l'ai fait faire changeait votre sortie de succès à utiliser MSG.D Il en est ainsi, il délivre en sortie le succès: jQuery est super. msg ne provoquerait PAS de plantage - il produirait juste une sortie Success: [object Object] (msg est un objet qui contient une chaîne appelée d dont le retour de la méthode statique est appelé).

Je n'ai pas changé votre méthode statique du tout

C'est dans ma classe (souvenez-vous Default.aspx)

public partial class _Default: System.Web.UI.Page { protected void Page_Load (expéditeur de l'objet, EventArgs e) { }

[WebMethod] 
public static string SampleMethod() 
{ 
    return "jQuery is Super"; 
} 

}

Ceci est assis à l'intérieur de mes Default.aspx.cs fichier

J'ai essayé de déconner pour obtenir une erreur 200 OK et la seule fois où j'ai réussi ce fut quand j'avais

, contentType: "application/ json;charset=utf-8" 

qui a un espace entre le/et json.

Mais ce n'est pas dans votre question. Peut-être qu'il est assis dans votre code de cette façon et vous l'avez corrigé dans la question?

+0

Le truc c'est que j'utilise IE6. Je suppose que cela ne fonctionne pas dans IE6. Est-ce vrai? – superachu

+0

Peut-être. Mais malheureusement, je n'ai pas de PC ici avec IE 6 pour tester la théorie. Avez-vous une machine avec autre chose que IE 6. Peut-être firefox? – Kamal

+0

Je pense que le problème est avec IE6. Il fonctionne parfaitement dans IE7 + et Mozilla Firefox. Dans IE6, ça ne marche pas aussi loin que j'ai vu. – superachu

1

Votre bouton est l'affichage de retour au lieu d'appeler l'événement click . Pour arrêter la publication involontaire, ajoutez e.preventDefault à votre gestionnaire de clics. Je suggère également de ne pas utiliser un contrôle côté serveur (c'est-à-dire supprimer le runat = serveur) à moins que ce ne soit absolument nécessaire. Cela ajoute simplement des frais généraux inutiles.

+0

Le code que j'ai écrit est correct. Cela ne fonctionne pas dans IE6. – superachu

0

J'ai le même problème aussi, mais quand je copier et coller le code dans un nouveau projet, il fonctionne très bien. Je pense qu'il devrait y avoir quelque chose de mal avec web.config