【问题标题】:JSON Invalide primitiveJSON 无效原语
【发布时间】:2015-01-29 03:34:40
【问题描述】:

我想在函数 test() 中将我的席位数传递给 TryJSIN.aspx。 但我有错误,当我使用“GET”类型时,我有错误

“无效的 JSON 原语:1-9。”

1-9 是 noSeat 值。 但是当我更改为“POST”时出现错误

尝试使用 POST 请求调用方法“test”,这是不允许的。

请检查我的以下代码。这是我使用get type的时候

  var sid = jQuery(this).attr('id');
    $.ajax({
        url: "TryJSON.aspx/test",
        type: "GET",
        data: {noSeat: sid},
        contentType: "application/json; charset=utf-8",

        success: function (response) {
          // var arr = JSON.parse(response.d);
            console.log(arr);            
        },
        error: function () {
            alert("sorry, there was a problem!");
            console.log("error");
        },
        complete: function () {
            console.log("completed");
        }

    }); 

当我使用 POST 类型时,下面的 ajax

var sid = jQuery(this).attr('id');
    $.ajax({
        url: "TryJSON.aspx/test",
        type: "POST",
        data: JSON.stringify({'noSeat': sid}),
        contentType: "application/json; charset=utf-8",
        success: function (response) {
          // var arr = JSON.parse(response.d);
            console.log(arr);            
        },
        error: function () {
            alert("sorry, there was a problem!");
            console.log("error");
        },
        complete: function () {
            console.log("completed");
        }

    });

这是我的 C# 代码

[WebMethod]
    [ScriptMethod(UseHttpGet = true)]
    public static string test(string noSeat)
    {
        return noSeat;
    }

请帮助我。我是 c# ajax 和 jQuery 的新手。所以我需要很多帮助

更新: 我在第一次评论后编辑我的代码。但它显示相同。

[WebMethod]
    [ScriptMethod(UseHttpGet = true)]
    public static string test(string noSeat)
    {
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        return serializer.Serialize(noSeat).ToString();
    }

【问题讨论】:

  • 你没有返回 JSON。
  • 我曾经使用过 json 序列化程序,但它仍然与 @SLaks 相同的注释出错
  • 您在开发工具中看到什么响应正文?

标签: c# jquery ajax json asp.net-ajax


【解决方案1】:

当我使用POST 时,我不允许使用[ScriptMethod(UseHttpGet = true)],因为它用于GET 类型。那么当我使用contentType: "application/json; charset=utf-8" 时,数据必须使用JSON.stringify,因为它认为我发送JSON 而我发送字符串数据。所以我需要先将其转换为 JSON。

var sid = jQuery(this).attr('id');
    //console.log(sid);
    $.ajax({
        url: "TryJSON.aspx/test",
        type: "post",
        data: JSON.stringify({ 'noSeat': sid }),
        contentType: "application/json; charset=utf-8",
        success: function (response) {
            var arr = JSON.parse(response.d);
            objData = new Array();
            objData = arr;
            for (i = 0; i < objData.length; i++)
            {                 
                alert(objData[i].noBooking +" "+ objData[i].noSeat);
            }                                           
        },
        error: function () {
            alert("sorry, there was a problem!");
            console.log("error");
        },
        complete: function () {
            console.log("completed");
        }

这是在 C# 上的解决方法

[WebMethod]
   // [ScriptMethod(UseHttpGet = true)]
    public static string test(string noSeat)
    {
        SqlConnection conn = DBConnection.getConnection();
        SqlCommand cmd;
        SqlDataReader dr;
        conn.Open();
        string sql = "Select noBooking,noSeat FROM booking WHERE noSeat = '" + noSeat +"' AND statusBooked = 1";
        cmd = new SqlCommand(sql, conn);
        dr = cmd.ExecuteReader();
        List<booking> BookList = new List<booking>();
        while (dr.Read())
        {
            booking bookClass = new booking();
            bookClass.noBooking =(int)dr[0];
            bookClass.noSeat = dr[1].ToString();
            BookList.Add(bookClass);
        }
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        return serializer.Serialize(BookList).ToString();
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 2019-08-24
    • 2020-07-31
    • 2014-04-17
    • 1970-01-01
    相关资源
    最近更新 更多