簡體   English   中英

Ajax呼叫不斷給我“內部服務器錯誤500”

[英]Ajax call keeps giving me “internal server error 500”

我對ajax不太滿意,但是如果存儲過程不返回數據或返回數據,並且如果正在返回數據,則嘗試在背后的代碼中調用cehck方法,然后使該方法返回一個布爾值,以真正。 我將ID列表傳遞給該方法。 但是我的ajax調用可能是錯誤的。

這是我的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 };
}

taskID是后面代碼中的int ,而在JavaScript中是Array

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

將需要一個方法簽名,例如:

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


注釋中的問題二:這是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]; // Now it exists and is ready if (hasExhibitLinked) { showMessage("There is an Exhibit linked."); } else { showMessage("Not exhibits linked"); } }, error: function (data) { } }); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM