【问题标题】:How to get response from webmethod and pass sql parameter如何从 webmethod 获取响应并传递 sql 参数
【发布时间】:2019-05-20 02:49:06
【问题描述】:

我有一个 ajax 脚本调用 web 方法,就像我以前一样,但现在无法得到响应。我得到了解析错误。请帮忙。

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void UzmiTaskove(int idprojekta)
{
        List<Taskovi> listataskova = new List<Taskovi>();
        string CS = Properties.Settings.Default.Konekcija.ToString();

        using (SqlConnection con = new SqlConnection(CS))
        {
            SqlCommand cmd4 = new SqlCommand("UzmiTaskove", con);
            cmd4.CommandType = CommandType.StoredProcedure;

            con.Open();

            cmd4.Parameters.AddWithValue("@IdProj", idprojekta);

            SqlDataReader rdr = cmd4.ExecuteReader();

            while (rdr.Read())
            {
                Taskovi tas = new Taskovi();
                tas.ID = Convert.ToInt32(rdr["ID"]);
                tas.IdProjekta = Convert.ToInt32(rdr["IdProjekta"]);
                tas.Opis = rdr["Opis"].ToString();
                tas.DatumPocetka = rdr["DatumPocetka"].ToString();
                tas.DatumZavrsetka = rdr["DatumZavrsetka"].ToString();
                tas.Status = rdr["Status"].ToString();

                listataskova.Add(tas);
            }
        }

        JavaScriptSerializer jm = new JavaScriptSerializer();
        Context.Response.Write(jm.Serialize(listataskova));
}

$.ajax({
        url: 'TaskoviServis.asmx/UzmiTaskove',
        type: 'POST',
        data:JSON.stringify({ idprojekta:idprojekta}),
        dataType: 'json',
        contentType: "application/json; charset=utf-8",

        success: function (respons) {
            alert(respons.d);

            var newHtml = "";
            $(poda).each(function (index, tas) {

                newHtml += '<li class="task">';
                newHtml += '<div class="task-container">';
                newHtml += '<span class="task-action-btn task-check">';
                newHtml += '<span class="action-circle large complete-btn" title="Mark Complete">';
                newHtml += '<i class="material-icons">check</i>';
                newHtml += '</span>';
                newHtml += '</span>';
                newHtml += '<span class="task-label" contenteditable="true">' + tas.Opis + '</span>';
                newHtml += '<span class="task-action-btn task-btn-right">';
                newHtml += '<span class="action-circle large" title="Assign">';
                newHtml += '<i class="material-icons">person_add</i>';
                newHtml += '</span>';
                newHtml += '<span class="action-circle large delete-btn" title="Delete Task">';
                newHtml += '<i class="material-icons">delete</i>';
                newHtml += '</span>';
                newHtml += '</span>';
                newHtml += '</div>';
                newHtml += '</li>';
            });

            $("#task-list").append(newHtml);
        },
        error: function (xhr, textStatus, error) {
            console.log(xhr.statusText);
            console.log(textStatus);
            console.log(error);
        }
    });

我什么都试过了……改变数据类型……等等……

【问题讨论】:

  • 问:您是否在 Chrome 开发者工具中查看过您的 Ajax 请求? JSON 看起来没问题吗?另外:请将确切的错误消息复制/粘贴到您的问题中。
  • 感谢您的快速回答这是来自 chrome 调试器中的 AJAX 调用的答案 OK Taskovi.js:84 parsererror Taskovi.js:85 SyntaxError: Unexpected token { in JSON at position 264 at parse ( ) 在 Qb (jquery-3.2.1.min.js:1) 在 A (jquery-3.2.1.min.js:1) 在 XMLHttpRequest. (jquery-3.2.1.min.js:1)

标签: c# jquery asp.net ajax


【解决方案1】:

好的,所以你的问题是这个方法给出了问题,因为它是无效的,所以在 ajax 代码中什么都不改变你的 ajax 代码就可以了,只需更改 webmethod 代码,直接返回类型和返回值,而不是 response.write 试试下面的代码。

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List<Taskovi> UzmiTaskove(int idprojekta)
{
        List<Taskovi> listataskova = new List<Taskovi>();
        string CS = Properties.Settings.Default.Konekcija.ToString();

        using (SqlConnection con = new SqlConnection(CS))
        {
            SqlCommand cmd4 = new SqlCommand("UzmiTaskove", con);
            cmd4.CommandType = CommandType.StoredProcedure;

            con.Open();

            cmd4.Parameters.AddWithValue("@IdProj", idprojekta);

            SqlDataReader rdr = cmd4.ExecuteReader();

            while (rdr.Read())
            {
                Taskovi tas = new Taskovi();
                tas.ID = Convert.ToInt32(rdr["ID"]);
                tas.IdProjekta = Convert.ToInt32(rdr["IdProjekta"]);
                tas.Opis = rdr["Opis"].ToString();
                tas.DatumPocetka = rdr["DatumPocetka"].ToString();
                tas.DatumZavrsetka = rdr["DatumZavrsetka"].ToString();
                tas.Status = rdr["Status"].ToString();

                listataskova.Add(tas);
            }
        }

       // JavaScriptSerializer jm = new JavaScriptSerializer();
      //  Context.Response.Write(jm.Serialize(listataskova));
      return listataskova;
}

并在 ajax 中进行如下更改

$.ajax({
    url: 'TaskoviServis.asmx/UzmiTaskove',
    type: 'POST',
    data:JSON.stringify({ idprojekta:idprojekta}),
    dataType: 'json',
    contentType: "application/json; charset=utf-8",

    success: function (respons) {
        //alert(respons.d);
        console.log(respons.d)
        var newHtml = "";
        $(respons.d).each(function (index, tas) {

            newHtml += '<li class="task">';
            newHtml += '<div class="task-container">';
            newHtml += '<span class="task-action-btn task-check">';
            newHtml += '<span class="action-circle large complete-btn" title="Mark Complete">';
            newHtml += '<i class="material-icons">check</i>';
            newHtml += '</span>';
            newHtml += '</span>';
            newHtml += '<span class="task-label" contenteditable="true">' + tas.Opis + '</span>';
            newHtml += '<span class="task-action-btn task-btn-right">';
            newHtml += '<span class="action-circle large" title="Assign">';
            newHtml += '<i class="material-icons">person_add</i>';
            newHtml += '</span>';
            newHtml += '<span class="action-circle large delete-btn" title="Delete Task">';
            newHtml += '<i class="material-icons">delete</i>';
            newHtml += '</span>';
            newHtml += '</span>';
            newHtml += '</div>';
            newHtml += '</li>';
        });

        $("#task-list").append(newHtml);
    },
    error: function (xhr, textStatus, error) {
        console.log(xhr.statusText);
        console.log(textStatus);
        console.log(error);
    }
});

试试这个应该可以。

【讨论】:

  • 谢谢...现在我有错误..无效的 Web 服务调用..缺少参数 idprojekta..????
  • 确保 [System.Web.Script.Services.ScriptService] 此行未注释。
  • @CristianoAzarnowski 试试这个
  • 响应文本:"[{\"ID\":1,\"IdProjekta\":2244,\"Opis\":\"Lorem Ipsum Dolores\",\"DatumPocetka\": \"25/06/2019\",\"DatumZavrsetka\":\"25/07/2019\",]{\"d\":null}"
  • 如果您在成功回调中收到此响应而不是正常工作,那么您的 .each 循环中可能存在问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-29
  • 2019-08-28
相关资源
最近更新 更多