【问题标题】:How to pass parameter(email ID) to a c# function from Jquery Ajax call?如何从 Jquery Ajax 调用将参数(电子邮件 ID)传递给 c# 函数?
【发布时间】:2012-01-12 14:22:33
【问题描述】:

我正在尝试从 Jquery Ajax 调用中调用 Web 服务方法。 方法接受前端的3个参数,在数据库中搜索记录。

我无法在 Ajax 调用中正确连接这 3 个参数:

网络方法是:

public bool FindRecord(string Fname, string Lname, string Email) 
{
    string SQL = "SELECT * FROM contactsSource WHERE (first_name ='" + Fname + "') AND (last_name = '" + Lname + "') AND (email_address_work = '" + Email +"')";
    OleDbDataReader reader = DataAccess.GetData(SQL);
    if (reader.HasRows)
    {
        return true;
    }
    else
    {
        return false;
    }
}

我正在尝试的 Ajax 调用是:

   <script type="text/javascript">
        $(document).ready(function() {
            $('#btnDownload').click(function() {
                var Fname = $('#Fname').val();
                var Lname = $('#Lname').val();
                var email = $('#Email').val();

                $.ajax({
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    data: '{"Fname":"' + Fname + '", "Lname":"' + Lname + '", "Email":' + email + '}',
                    url: "WebService.asmx/FindRecord",
                    dataType: "json",
                    success: function(result) {
                        alert(result.d);
                    },
                    error: function(result) {
                        alert("Due to unexpected errors we were unable to load data");
                    }
                });
                //$('.secondary').show(500);
            });
        });    

    </script>

但我不断收到 500 内部服务器错误:

{"Message":"Invalid JSON primitive: (Email ID that I am passing).","StackTrace":" at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()

【问题讨论】:

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


    【解决方案1】:

    您的电子邮件参数应该用双引号括起来,否则它不会被正确解析为 JSON 字符串值。更正后的语法应该是:

    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        data: '{"Fname":"' + Fname + '", "Lname":"' + Lname + '", "Email":"' + email + '"}',
        url: "WebService.asmx/FindRecord",
        dataType: "json",
        success: function(result) {
            alert(result.d);
        },
        error: function(result) {
            alert("Due to unexpected errors we were unable to load data");
        }
    });
    

    【讨论】:

    • 伟大的观察@Prutswonder,它工作:) 非常感谢,这是我第一次使用 Jquery 和 Ajax 的经验
    • @Vishal 一定要阅读其他答案,你这样做很难。请记住,JSON 是 Javascript 对象表示法。
    • @Chris 当然,我也会尝试另一种方式,实际上这是我在 Jquery 和 Ajax 上的第一个任务。谢谢顺便说一句。
    【解决方案2】:

    您正在构建您的 data 对象错误。改为这样做:

    data: {Fname: Fname, Lname: Lname, Email: Email }
    

    【讨论】:

    • 是的,这也是一种更好更简洁的方法,感谢您的帮助
    【解决方案3】:

    不需要引号..

    试试:

                $.ajax({
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    data: {Fname: Fname, Lname: Lname, Email: email},
                    url: "WebService.asmx/FindRecord",
                    dataType: "json",
                    success: function(result) {
                        alert(result.d);
                    },
                    error: function(result) {
                        alert("Due to unexpected errors we were unable to load data");
                    }
                });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-01
      • 2016-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-18
      • 2010-12-27
      • 1970-01-01
      相关资源
      最近更新 更多