2009-09-13 5 views
1

J'essaie de sauvegarder les données du tableau HTML dans la base de données en utilisant jquery pour appeler une méthode page. Cependant, l'appel de jquery échoue avec: 500 erreur de serveur interne. Un conseil?Echec de l'appel jquery de la méthode page

est Ci-dessous le code:

SCRIPT:

$(document).ready(function() { 


     $("#save").click(function(event) { 

      var i = 0; 
      var inputs = new Array(); 
      $("#tbNames").find("input").each(function() {   
       inputs[i] = [this.id, this.value]; 
       i++; 
      }); 

      var columnsCount = 2; 
      $.ajax({ 

       type: "POST", 
       url: "Default2.aspx/Save", 
       contentType: "application/json; charset=utf-8", 
       data: "{inputs: inputs, columnsCount: columnsCount}", 
       dataType: "json", 
       success: AjaxSucceeded, 
       error: AjaxFailed 
      }); 
     }); 
     function AjaxSucceeded(result) { 
      alert(result.d); 
     } 

     function AjaxFailed(result) { 
      alert(result.status + ' ' + result.statusText); 
     } 

    }); 



    </script> 

HTML:

Nom Tâche Supprimer

<input id="save" type="button" value="Save data" /> 

et C# code de la méthode de la page:

[WebMethod()] 
    public static List<Hashtable> ParseJson(string[] array, int rowsCount) 
    { 
    var result = new List<Hashtable>(); 

    List<string[]> list = new List<string[]>(); 
    foreach (var item in array) 
    { 
     int comma = item.IndexOf(','); 
     list.Add(new string[] { item.Substring(0, comma), item.Substring(comma + 1) }); 
    } 

    int i = 0; 
    while (i < list.Count) 
    { 
     var dict = new Hashtable(); 
     int j = i + rowsCount; 
     for (; i < j; i++) 
     { 
      dict.Add(list[i][0], list[i][1]); 
     } 

     result.Add(dict); 
    } 

    return result; 

} 

[WebMethod()] 
public static string Save(string[] inputs, int columnsCount) 
{ 
    List<Hashtable> r = ParseJson(inputs, columnsCount); 

    List<TestClass> listOfTasks = new List<TestClass>(); 
    foreach (var item in r) 
    { 
     TestClass tc = new TestClass(); 
     tc.name = (string)item["name"]; 
     tc.task = (string)item["task"]; 

     listOfTasks.Add(tc); 
    } 

    DBManager dbm = new DBManager(); 
    string actionResult = dbm.SaveData(listOfTasks); 
    if (actionResult == String.Empty) 
    { 
     return "Saved!"; 
    } 
    else 
    { 
     return actionResult; 
    } 
} 

Répondre

2

La clé est json2.js et sa fonction stringify. Après la mise en œuvre de cet appel ressemble AJAX fonction ceci:

$.ajax({ type: "POST", 
     url: "Default2.aspx/Save", 
     contentType: "application/json; charset=utf-8", 
     data: "{'inputs':" + JSON.stringify(inputs) + ",'columnsCount':1 }", 
     dataType: "json", 
     success: AjaxSucceeded, 
     error: AjaxFailed 
}); 

source.

1

500 est une erreur générique. Il y a un problème avec le service Web que votre JQuery utilise. Vous devez regarder les journaux écrits par votre service pour trouver ce qui n'allait pas, ou vous devez définir un point d'arrêt dans votre code de service pour le déboguer.

+0

Le point d'arrêt de la fonction C# Save() n'a pas été atteint. Donc, il semble que une méthode d'appel à la page est un échec. Sur la même page je mets un bouton 'hello world' qui appelle aussi la méthode page et ça marche bien. L'erreur se produit dans le: .ajax $ ({type: "POST", url: "Default2.aspx/Save", contentType: "application/JSON; charset = utf-8", les données: « { inputs: inputs, columnsCount: columnsCount} ", dataType:" json ", succès: AjaxSucceeded, erreur: AjaxFailed}); – Neno

Questions connexes