2012-10-11 2 views
0

Je ne suis pas très bon avec ajax mais j'essaie d'appeler une méthode dans le code derrière cehck si une procédure stockée ne renvoie aucune donnée ou retourne des données, et si il renvoie des données, puis rend la méthode retourne un bool évaluant à vrai. Je passe une liste d'identifiants à la méthode. Cependant, mon appel ajax est probablement faux.Ajax appel continue de me donner "erreur serveur interne 500"

Voici mon ajax:

var hasExhibitLinked = false; 
      var selectedTasksList = getSelectedTaskIDs(); 

      $.ajax({ 
       type: "POST", 
       url: '<%=ResolveUrl("~/Tasks/ViewTasks.aspx/HasExhibitLinked")%>', 
       data: "{'taskID':['" + selectedTasksList.join(',') + "']}", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function (data) { 

        arr = data.d; 

        hasExhibitLinked = arr[0]; 
       }, 
       error: function (data) { 
       } 
      }); 

      if (hasExhibitLinked) { 
       showMessage("There is an Exhibit linked."); 

      } 
      else { 
       showMessage("Not exhibits linked"); 

      } 

ici est mon code derrière si plus d'informations sont nécessaires: EDIT:

[WebMethod] 
public static bool[] HasExhibitLinked(String[] taskID) 
{ 
    bool hasLink = false; 
    var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["OSCIDConnectionString"].ToString()); 
    var cmd = new SqlCommand("p_Link_List", conn); 
     cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Parameters.Add(new SqlParameter("@Taskid", SqlDbType.Int)); 

    foreach (var id in taskID) 
    { 
     cmd.Parameters["@Taskid"].Value = taskID; 
     try 
     { 
      conn.Open(); 
      String s = (String)cmd.ExecuteScalar(); 
      if (s != null) 
       hasLink = true; 
     } 
     catch (SqlException sql) 
     { 
      ErrorLogger.Log(sql.Number, sql.Source, sql.Message); 
     } 
     catch (Exception ex) 
     { 
      ErrorLogger.Log(ex); 
     } 
     finally 
     { 
      if (conn.State == ConnectionState.Open) 
       conn.Close(); 
     } 
    } 
    return new bool[] { hasLink }; 
} 
+0

Est-ce que votre JavaScript est dans le fichier ASPX lui-même? –

+0

oui dans le .aspx – user1084319

Répondre

3

taskID est un int dans le code derrière et un Array dans la JavaScript.

data: "{'taskID':['" + selectedTasksList.join(',') + "']}", 

nécessiterait une signature de la méthode comme:

public static bool[] HasExhibitLinked(List<int> taskID) 


Question Deux dans les commentaires: Ceci est une erreur commune avec ajax. Ce code est asynchrone. Par conséquent, cette variable n'existe pas lorsque vous essayez d'y accéder. C'est pourquoi vous voyez beaucoup de fonctions "callback".

 var hasExhibitLinked = false; 
     var selectedTasksList = getSelectedTaskIDs(); 

     $.ajax({ 
      type: "POST", 
      url: '<%=ResolveUrl("~/Tasks/ViewTasks.aspx/HasExhibitLinked")%>', 
      data: "{'taskID':['" + selectedTasksList.join(',') + "']}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (data) { 

       arr = data.d; 

       hasExhibitLinked = arr[0]; 
       // Now it exists and is ready 
       if (hasExhibitLinked) { 
        showMessage("There is an Exhibit linked."); 
       } else { 
        showMessage("Not exhibits linked"); 
       } 
      }, 
      error: function (data) { 
      } 
     }); 
+0

would (String [] taskID) fonctionne aussi? – user1084319

+0

Oui, cela fonctionnerait bien. – Joe

+0

Merci. Cependant j'ai une autre question rapide. Comment puis-je obtenir le bool retourné par derrière dans l'appel d'ajax? arr = data.d; hasExhibitLinked = arr [0]; ne semble pas fonctionner – user1084319