2012-10-11 41 views
0

我不是很擅長ajax,但我試圖在後面的代碼中調用一個方法來實現,如果存儲過程沒有返回數據或返回數據,並且if它正在返回數據,然後使該方法返回一個bool評估爲true。我正在傳遞一個id列表給該方法。 但是我的ajax調用可能是錯誤的。Ajax調用一直給我「內部服務器錯誤500」

這裏是我的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"); 

      } 

這裏是我的代碼背後,如果需要更多的信息: 編輯:

[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

ASPX文件本身就是您的JavaScript嗎? –

+0

yes .aspx – user1084319

回答

3

任務id是在後面的代碼的int,並在一個Array JavaScript的。

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

將需要像一個方法簽名:在評論

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


疑問二:這是阿賈克斯一個常見的錯誤。該代碼是異步的。因此,當您嘗試訪問它時,該變量不存在。這就是爲什麼你看到很多「回調」功能。

 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)也適用? – user1084319

+0

是的,它會正常工作。 – Joe

+0

謝謝。不過,我還有一個簡單的問題。我怎樣才能從ajax調用的後面得到返回的布爾值? arr = data.d; hasExhibitLinked = arr [0];似乎沒有工作 – user1084319

相關問題