我必须在JSON.stringify中传递值并在服务器端接收。


  注意:当我尝试不使用JQuery变量而直接传递值时,它工作正常。


没有Jquery变量(正在工作)

data: JSON.stringify({ "VendorID": "1106", "Date": "2016-12-30" }),


当我尝试通过JQuery变量传递值时,

错误信息


  它引发内部服务器错误
  
  “过程或函数'FVendorAging'需要未提供的参数'@Date'。”


使用JQuery将日期格式从(dd-MM-yyyy)转换为(yyyy-MM-dd)

 if ($('#ContentPlaceHolder1_txtDate').val() !== '') {
        dateAr = $('#ContentPlaceHolder1_txtDate').val().split('-');
        var newDates = dateAr[2] + '-' + dateAr[1] + '-' + dateAr[0];
        alert('Date is not empty = ' + newDates);  //2017-07-11
    }


Ajax代码

$.ajax({
        type:"POST",
        contentType:"application/json;charset=utf-8",
        url: "GPCreateCheque.aspx/BindData",
        //data:"{}",
        data: JSON.stringify({ "VendorID": +selecteVendorID, "Date": +newDates }),
        dataType:"json",
        success: function (data) {
            alert("success = " + data.d[0].DocumnetNo);
            for(var i=0;i<data.d.length;i++){
                $("#ContentPlaceHolder1_GridView1").append("<tr><td><input id=\"Checkbox" + i + "\" class=\"checkBoxClass\" type=\"checkbox\" /></td><td>" + data.d[i].DocumnetNo + "</td><td>" + data.d[i].Date + "</td><td class='ActualAmount' >" + data.d[i].OriginalAmount + "</td></tr>");
            }
        },
        error:function(result){
            alert("Error");
        }
    })


C#代码

[WebMethod]
    public static UserDetails[] BindData(string VendorID,string Date)
    {
        DataTable dt = new DataTable();
        List<UserDetails> details = new List<UserDetails>();

        string cs = ConfigurationManager.ConnectionStrings["GPMatajerAlSaudia"].ConnectionString;
        using (SqlConnection con = new SqlConnection(cs))
        {
            SqlCommand cmd = new SqlCommand("FVendorAging", con);
            cmd.CommandType = CommandType.StoredProcedure;

            //cmd.Parameters.AddWithValue("@Date", "2017-07-11");
            //cmd.Parameters.AddWithValue("@VendorID", "1106");

            cmd.Parameters.AddWithValue("@Date", Date);
            cmd.Parameters.AddWithValue("@VendorID", VendorID);

            con.Open();
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(dt);
            foreach (DataRow drow in dt.Rows)
            {
                UserDetails user = new UserDetails();
                user.DocumnetNo = drow["DocumnetNo"].ToString();
                user.Date = drow["Date"].ToString();
                user.OriginalAmount = drow["OriginalAmount"].ToString();
                details.Add(user);
            }
        }
        return details.ToArray();
    }

最佳答案

问题是因为您要在日期变量前面加上+。这意味着您试图将日期格式的字符串解析为Number()-这会引起问题。

要解决此问题,只需删除+。还要注意,由于您已将contentType指定为JSON,因此无需手动调用JSON.stringify,因为jQuery会为您完成此操作。尝试这个:

data: {
  "VendorID": selecteVendorID,
  "Date": newDates
},

关于javascript - 如何在JSON.stringify中传递JQuery变量并在服务器端接收?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45032504/

10-12 07:40
查看更多