2011-11-28 4 views
0

J'ai essayé d'appeler Simple Web Method à partir de JSON, mais j'obtiens des erreurs.SyntaxError: JSON.parse

En Chrome:

SyntaxError: unexpected token <

Dans Firefox:

SyntaxError: JSON.parse

code Javascript:

$(document).ready(function() { 
    $('#<%=ddlTest.ClientID %>').change(function() { 
     var value = $('#<%=ddlTest.ClientID %>').val(); 
     var req = $.ajax({ 
      type: "POST", 
      url: "Test.aspx/getTest", 
      data: "{Id: '" + value + "'}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function(data) { 
       $(alert(data.d)) 
      }, 
      error: function(XMLHttpRequest, text, error) { alert(error); }, 
      failure: function(response) { 
       alert(response.d); 
      } 
     }) 
    }); 
});  

.aspx Code:

<asp:DropDownList ID="ddlTest" AutoPostBack="false" runat="server"> 
    <asp:ListItem Value="0" Text="zero" /> 
    <asp:ListItem Value="1" Text="One" /> 
    <asp:ListItem Value="2" Text="Two" /> 
</asp:DropDownList> 
<asp:Label ID="lblTest" runat="server" Text="hiii"/> 

WebMethod:

[WebMethod] 
public static string getTest(string id) 
{ 
    return id; 
} 

S'il vous plaît me guide ...

+0

Votre code côté serveur ne sera même pas compilé. Vous ne pouvez pas renvoyer une valeur d'une méthode déclarée comme «void». Donc, la première étape serait de réparer et de compiler votre code côté serveur. Ensuite, nous verrons à propos du client. –

Répondre

0

J'ai trouvé la solution à mon problème. Je viens d'ajouter fou. lignes dans mon fichier web.config et son fonctionnement bien maintenant.

<httpModules> 
    <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
</httpModules> 
-1

supprimer 'id retour';

au lieu vous devez répondre à la sérialisation JSON et faire écrire une réponse

using System.Text; 
    using System.Runtime.Serialization.Json; 
    using System.IO; 

... 

    public static string ToJSON(this object obj) 
      { 
       string json = string.Empty; 

       DataContractJsonSerializer ser = new DataContractJsonSerializer(obj.GetType()); 

       using (MemoryStream ms = new MemoryStream()) 
       { 
        ser.WriteObject(ms, obj); 
        json = Encoding.Default.GetString(ms.ToArray()); 
       } 

       return json; 
      } 

...

HttpContext.Current.Response.Write(ToJSON(id)); 
+3

Absolument pas. ASP.net prend en charge la sérialisation, cela fait partie du mécanisme PageMethods. Vous ne devriez jamais faire ça, c'est doubler le travail ([source] (http://encosia.com/asp-net-web-services-mistake-manual-json-serialization/)) –

+0

Merci Didier, gentil lien! Bon à savoir – f0rza

+0

vous utilisez la méthode d'extension. Je ne veux pas utiliser la méthode d'extension. Si j'ai supprimé 'ceci', il affiche une erreur - "Erreur 2 Le type 'System.Runtime.Serialization.XmlObjectSerializer' est défini dans un assembly qui n'est pas référencé Vous devez ajouter une référence à l'assembly 'System.Runtime.Serialization , Version = 3.0.0.0, Culture = neutre, PublicKeyToken = b77a5c561934e089 '." – Abhi

0

Si vous jetez un oeil à la réponse à votre demande AJAX dans quelque chose comme Firebug, vous verra le balisage HTML est retourné au lieu de JSON.

C'est parce que votre paramètre data n'est pas correct. Pour cette raison, la requête que vous effectuez ne correspond à aucune méthode de page disponible et finit par être traitée comme une demande régulière sur la page ASPX elle-même.

Étant donné que le premier caractère d'un document HTML est un premier caractère non valide pour un document JSON, l'analyseur JSON échoue à l'analyser correctement.

Pour résoudre ce problème, changer votre data paramètre comme ceci:

// Parameters to page methods are case sensitive. Id != id. 
// 
// Parameter names need to be quoted. ASP.NET will allow for both double and 
// single quotes, but technically only double quotes are valid JSON. 
data: '{"id": "' + value + '"}", 

chaînes JSON du bâtiment manuellement sur le côté client devient rapidement désordre. Vous pouvez être intéressé par using JSON.stringify to clean that process up a bit.

+0

Salut Dave .. encore son ne fonctionne pas .. même erreur :( – Abhi

+0

Quelle version de ASP.NET est-ce en cours d'exécution? –

+0

Hey Dave j'ai eu le Je viens d'ajouter des lignes foll dans web.config et son fonctionnement correct Abhi

Questions connexes