将Param发送到jQuery的Ajax无效

时间:2011-10-25 18:43:04

标签: c# javascript jquery asp.net ajax

我正在尝试使用jQuery的Ajax,我在下面有这个代码,虽然我在firebug中没有错误但它没有工作,但似乎后面的代码中的函数没有得到任何参数。

(document).ready(function () {
        $("#S1").click(function 
            () {

            $("#t1").toggle("fast");
            $("#P1").toggle("fast");
            $("#S1").css("background-color", "White");
            var ID = $("#HiddenField1").attr("Value");
            var params = { 'Key': ID };
            $.ajax({
                type: "POST",
                url: "viewMessages.aspx/readen",
                data: params,                    
                dataType: "json"
            });
        });
    });

以下是

背后的代码
[WebMethod(EnableSession = false)]
public static void  readen(string Key)
{
    DBController db = new DBController();
    db.ReadenMes(Convert.ToInt32(Key));                
}

下面的代码可以工作,但由于我想在IE 6中使用它,我必须使用上面的代码。

 $(document).ready(function () {
 $("#S2").click(function 
     () {
     $("#t2").toggle("fast");
     $("#P2").toggle("fast");
     $("#S2").css("background-color","White");
     var ID = $("#HiddenField2").attr("Value");
     var params = new Object();
     params.Key = ID;
     var myJSONText = JSON.stringify(params);
     $.ajax({
         type: "POST",
         url: "viewMessages.aspx/readen",
         data: myJSONText,
         contentType: "application/json",
         dataType: "json"

     });
 });

});

你认为我在哪里做错了?

3 个答案:

答案 0 :(得分:4)

3 mistakes to avoid when using jQuery with ASP.NET AJAX

$(document).ready(function () {
    $("#S1").click(function 
        () {

        $("#t1").toggle("fast");
        $("#P1").toggle("fast");
        $("#S1").css("background-color", "White");
        var ID = $("#HiddenField1").val();
        var params = "{ 'Key':'" + ID + "'}"; //changes here
        $.ajax({
            type: "POST",
            url: "viewMessages.aspx/readen",
            data: params,                    
            dataType: "json",
            contentType: "application/json; charset=utf-8"
        });
    });
});

答案 1 :(得分:1)

如果您的问题仅在于IE6没有JSON.stringify方法,那么您可以使用json2.js from Douglas Crockford,然后您的第二个样本也应该在IE6中按预期工作。

$(function () {
  $("#S2").click(function 
     $("#t2").toggle("fast");
     $("#P2").toggle("fast");
     $("#S2").css("background-color","White");
     var ID = $("#HiddenField2").attr("Value");
     var myJSONText = JSON.stringify({ Key: ID });
     $.ajax({
         type: "POST",
         url: "viewMessages.aspx/readen",
         data: myJSONText,
         contentType: "application/json",
         dataType: "json"
     });
  });
});

另一种方法是不使用'json'数据类型,然后params应序列化为常规查询字符串。

$(function () {
  $("#S2").click(function 
     $("#t2").toggle("fast");
     $("#P2").toggle("fast");
     $("#S2").css("background-color","White");
     var ID = $("#HiddenField2").attr("Value");
     var params = { Key: ID };
     $.post("viewMessages.aspx/readen", params);
  });
});

答案 2 :(得分:0)

var ID = $("#HiddenField2").val();
$.ajax({
    type: "POST",
    url: "viewMessages.aspx/readen",
    data: {"KEY":ID},
    contentType: "application/json",
    dataType: "json"

 });

此外,您不需要对数据组件进行字符串化,也不需要声明新的Object。