Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery自动完成与回调ajax json_Jquery_Json_Autocomplete - Fatal编程技术网

jQuery自动完成与回调ajax json

jQuery自动完成与回调ajax json,jquery,json,autocomplete,Jquery,Json,Autocomplete,我试图找到一种方法,使用jQuery autocomplete和回调源,通过ajaxjson对象列表从服务器获取数据 有人能给我指路吗 我在谷歌上搜索了一下,但找不到完整的解决方案。这是一个非常好的示例,包含源代码 jQuery HTML 我的问题是,最终用户将开始在文本框中键入内容,接收自动完成ACP建议,并在选择建议时更新调用控件,因为ACP是默认设计的。但是,我还需要更新多个其他控件文本框、下拉列表等。。。具有特定于最终用户选择的数据。我一直在试图找出一个优雅的解决方案来解决这个问题,我觉

我试图找到一种方法,使用jQuery autocomplete和回调源,通过ajaxjson对象列表从服务器获取数据

有人能给我指路吗


我在谷歌上搜索了一下,但找不到完整的解决方案。

这是一个非常好的示例,包含源代码

jQuery

HTML


我的问题是,最终用户将开始在文本框中键入内容,接收自动完成ACP建议,并在选择建议时更新调用控件,因为ACP是默认设计的。但是,我还需要更新多个其他控件文本框、下拉列表等。。。具有特定于最终用户选择的数据。我一直在试图找出一个优雅的解决方案来解决这个问题,我觉得我开发的解决方案值得分享,希望至少能为您节省一些时间

WebMethod SampleWM.aspx:

目的:

捕获SQL Server存储过程结果并将其作为JSON字符串返回给AJAX调用方 注:

Data.GetDataTableFromSP-是一个自定义函数,用于从存储过程的结果返回DataTable _ 公共共享函数GetAutoCompleteDataByVal QueryFilterAs String作为字符串 自动完成jQuery AutoComplete.aspx:

目的: 对WebMethod执行Ajax请求,然后处理响应
如果返回一个复杂的json对象,则需要修改auto complete的success函数,如下所示

$.ajax({
    url: "/Employees/SearchEmployees",
    dataType: "json",
    data: {
        searchText: request.term
    },
    success: function (data) {
        response($.map(data.employees, function (item) {
            return {
                label: item.name,
                value: item.id
            };
        }));
    }
});

我使用$的构造。每个数据[I],函数键,值 但必须将选择字段的名称与表单元素的名称预先匹配。然后,在成功后的循环中,自动完成数据数组中的元素。这样做:

我希望这有助于:

var token = document.getElementById('token').value;
var nombre = document.getElementById('txtNombre').value;    

$("#txtNombre").keyup(function () {
    $.ajax({
        type: "POST",
        url: host() + "Formulario/BuscarNombreAutocompletar/",
        data: JSON.stringify({ "nombre": nombre }),
        headers: {
            'Authorization': 'Bearer ' + token
        },
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            var dataArray = [];
            if (controlCarga(data)) {

                $.each(data[1], function (i, item) {
                    dataArray.push(item.frmNombre)
                });

                $('#txtNombre').autocomplete({
                    clearButton: true,
                    source: dataArray,
                    selectFirst: true,
                    minLength: 2
                });
            }
        },
        error: function (xhr, textStatus, errorThrown) {
            console.log('Error: ' + xhr.responseText);
        }
    });
});

这是一个jquery ui示例。@RNKushwaha如果您注意到,顶部有一个名为log的函数用于记录日志。我无法理解success:function data{response data;}在ajax调用中是如何工作的。我的意思是,什么是反应函数?它根据数据创建一些元素,但是如果我想自定义这些元素,我应该怎么做?我想添加一对属性…我在Rails中工作,我的控制器返回format.json{render json:@products.map&:name.to_json},我必须删除上面示例中的数据类型:jsonp才能工作。@michel,请从数据类型:jsonpf中删除单词p,因为这返回的是空结果。结果本身空表显示在输入框下面,但没有显示任何内容。
 //Call to custom function to return SP results as a DataTable
 // DataTable will consist of Field0 - Field5
 Dim params As ArrayList = New ArrayList
 params.Add("@QueryFilter|" & QueryFilter)
 Dim dt As DataTable = Data.GetDataTableFromSP("AutoComplete", params, [ConnStr])

 //Create a StringBuilder Obj to hold the JSON 
 //IE: [{"Field0":"0","Field1":"Test","Field2":"Jason","Field3":"Smith","Field4":"32","Field5":"888-555-1212"},{"Field0":"1","Field1":"Test2","Field2":"Jane","Field3":"Doe","Field4":"25","Field5":"888-555-1414"}]
 Dim jStr As StringBuilder = New StringBuilder

 //Loop the DataTable and convert row into JSON String
 If dt.Rows.Count > 0 Then
      jStr.Append("[")
      Dim RowCnt As Integer = 1
      For Each r As DataRow In dt.Rows
           jStr.Append("{")
           Dim ColCnt As Integer = 0
           For Each c As DataColumn In dt.Columns
               If ColCnt = 0 Then
                   jStr.Append("""" & c.ColumnName & """:""" & r(c.ColumnName) & """")
               Else
                   jStr.Append(",""" & c.ColumnName & """:""" & r(c.ColumnName) & """")
                End If
                ColCnt += 1
            Next

            If Not RowCnt = dt.Rows.Count Then
                jStr.Append("},")
            Else
                jStr.Append("}")
            End If

            RowCnt += 1
        Next

        jStr.Append("]")
    End If

    //Return JSON to WebMethod Caller
    Return jStr.ToString
    $(function() {
      $("#LookUp").autocomplete({                
            source: function (request, response) {
                $.ajax({
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    url: "SampleWM.aspx/GetAutoCompleteData",
                    dataType: "json",
                    data:'{QueryFilter: "' + request.term  + '"}',
                    success: function (data) {
                        response($.map($.parseJSON(data.d), function (item) {                                
                            var AC = new Object();

                            //autocomplete default values REQUIRED
                            AC.label = item.Field0;
                            AC.value = item.Field1;

                            //extend values
                            AC.FirstName = item.Field2;
                            AC.LastName = item.Field3;
                            AC.Age = item.Field4;
                            AC.Phone = item.Field5;

                            return AC
                        }));       
                    }                                             
                });
            },
            minLength: 3,
            select: function (event, ui) {                    
                $("#txtFirstName").val(ui.item.FirstName);
                $("#txtLastName").val(ui.item.LastName);
                $("#ddlAge").val(ui.item.Age);
                $("#txtPhone").val(ui.item.Phone);
             }                    
        });
     });
$.ajax({
    url: "/Employees/SearchEmployees",
    dataType: "json",
    data: {
        searchText: request.term
    },
    success: function (data) {
        response($.map(data.employees, function (item) {
            return {
                label: item.name,
                value: item.id
            };
        }));
    }
});
$(document).on('keyup','#search_product',function(){
    $( "#search_product" ).autocomplete({
      source:function(request,response){
                  $.post("<?= base_url('ecommerce/autocomplete') ?>",{'name':$( "#search_product" ).val()}).done(function(data, status){

                    response(JSON.parse(data));
        });
      }
    });
});
public function autocomplete(){
    $name=$_POST['name'];
    $result=$this->db->select('product_name,sku_code')->like('product_name',$name)->get('product_list')->result_array();
    $names=array();
    foreach($result as $row){
        $names[]=$row['product_name'];
    }
    echo json_encode($names);
}
var token = document.getElementById('token').value;
var nombre = document.getElementById('txtNombre').value;    

$("#txtNombre").keyup(function () {
    $.ajax({
        type: "POST",
        url: host() + "Formulario/BuscarNombreAutocompletar/",
        data: JSON.stringify({ "nombre": nombre }),
        headers: {
            'Authorization': 'Bearer ' + token
        },
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            var dataArray = [];
            if (controlCarga(data)) {

                $.each(data[1], function (i, item) {
                    dataArray.push(item.frmNombre)
                });

                $('#txtNombre').autocomplete({
                    clearButton: true,
                    source: dataArray,
                    selectFirst: true,
                    minLength: 2
                });
            }
        },
        error: function (xhr, textStatus, errorThrown) {
            console.log('Error: ' + xhr.responseText);
        }
    });
});