【问题标题】:undefined error at calling wcf service from jquery ajax从 jquery ajax 调用 wcf 服务时出现未定义的错误
【发布时间】:2015-02-11 05:42:42
【问题描述】:

我正在尝试从 jquery ajax 调用 WCF 服务,但我只收到未定义的错误。请帮我解决这个问题。我的服务运行良好,但我的问题是从 ajax 调用 WCF。我的代码在这里

$('#customerName').autocomplete({
                    source: function (request, response) {
                        var param ={email:$('#customerName').val()};
                        $.ajax({
                            url: "http://localhost:53925/Service1.svc/Getusermail/" + $('#customerName').valueOf(),
                            data:"{}",
                            dataType: "json", 
                            type: "GET",

                            processData: true,
                            async:false,
                            contentType: "application/json; charset=utf-8",
                            error: function (XMLHttpRequest, textStatus, errorThrown)
                            {
                                var err = eval("(" + XMLHttpRequest.responseText + ")");
                                alert(err);
                                 //console.log(err.Message);  
                            },
                            success: function (data)
                            {
                                alert("correct code");
                                //response(data.d);
                            }
                        });
                    },
                    minLength: 1 //This is the Char length of inputTextBox  
                });
            });

我也在 WCF 的 web.config 中添加了必需的配置。在此先感谢。我的服务代码在这里

public List<string> Getusermail(string email)
    {
        List<string> emailid = new List<string>();
        string query = string.Format("SELECT email FROM nciuser WHERE email LIKE '%{0}%'", email);
        //Note: you can configure Connection string in web.config also.
        using (SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=mbci;Integrated Security=True"))
        {
            using (SqlCommand cmd = new SqlCommand(query, con))
            {
                con.Open();
                SqlDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    emailid.Add(reader.GetString(0));
                }
            }
        }
        return emailid;
    }

上述方法的接口是

 [OperationContract(Name = "Getusermail")]
    [WebGet(UriTemplate = "Getusermail/{email}", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
    List<string> Getusermail(string email);

【问题讨论】:

  • 请突出显示您遇到错误的行..以获得更好的答案
  • 这里它只调用错误函数代码而不是成功函数......即使我的服务运行良好
  • 您的Getusermail 方法是如何定义的?
  • 错误函数定义错误。

标签: c# jquery ajax wcf


【解决方案1】:

您的代码中有几个错误:

  1. $('#customerName').valueOf() 不返回文本框的值。为此,您应该使用$('#customerName').val()

    更好的是:自动完成小部件提供 request 参数中的值。使用request.term,而不是直接从元素中读取。

  2. 删除data:"{}"。由于这是一个GET 请求,jQuery 会将数据添加到 URL 的末尾:/Service1.svc/Getuseremail/test?{}

  3. 根据配置和版本,WCF 运行时将返回带有或不带有 d 属性的对象。为了安全起见,您可以使用response(data.d || data)。这将选择 d 属性(如果存在),否则使用完整对象。

$('#customerName').autocomplete({
    source: function (request, response) {
        $.ajax({
            url: "/Service1.svc/Getusermail/" + request.term,
            dataType: "json", 
            type: "GET",

            processData: true,
            async: false,
            contentType: "application/json; charset=utf-8",
            error: function (xhr, textStatus, errorThrown) {
                console.log(xhr.responseText);  
            },
            success: function (data) {
                response(data.d || data);
            }
        });
    },
    minLength: 1 //This is the Char length of inputTextBox  
});

【讨论】:

    【解决方案2】:

    我使用了这段代码@Markus,它现在正在运行

      $(function () {
                   $('#customerName').autocomplete({
                        source: function (request, response) {
                            var param =$("#customerName").val();
                            $.ajax({
                                url: "http://10.10.4.86:66/MBCI_Services/Service1.svc/Getusermail/" + $('#customerName').val(),
                                data:'',
                                dataType: "json", 
                                type: "GET",
                                crossDomain:true,
                                processData: true,
                                async:false,
                                contentType: "application/json",
    
                                error: function (xhr, ajaxOptions, thrownError)
                                {
                                    alert(thrownError);
                                   // console.log(thrownError);
                                },
    
                                success: function (data)
                                {
    
                                    response($.map(data, function (item) {
                                        return {
                                            value: item
                                        }
    
                                    }))
                                    //alert("work aaitu");
                                }
                                //+ $('#customerName').val()
                            });
                        },
                        minLength: 1 
                    });
                });
    

    【讨论】:

      猜你喜欢
      • 2014-08-12
      • 2013-07-09
      • 2014-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-27
      • 1970-01-01
      相关资源
      最近更新 更多