JQuery Autocomplete, populate with data from pHp json

跟風遠走 提交于 2019-12-30 07:33:41

问题


I am returning a JSON encoded array: echo(json_encode($data)); from php and I would like it to populate the suggest box from JQuery autocomplete. I'm using this:

$("#field").autocomplete({
            source : "SearchTest.php",
            maxLength: 5
        });

Not sure why this isn't working. After every key press, I would retrieve data and fill the suggest box with that data, I don't want autocomplete to sort and choose for me, I'm doing that server side. It's just a list of strings for now. Being able to customize how the data is presented would be nice as well.

Edit: Changed source to post:

$("#field").autocomplete({
            source : function(request, response) {
                $.post("SearchTest.php", request, response);
            },
            maxLength : 5
        });

Getting this error now:

Uncaught TypeError: Cannot use 'in' operator to search for '1240' in 
Notice: Undefined index: field in /.../SearchTest.php on line 25

Line 25 is : $whatTheyWantToSearch = $_POST['field'];


回答1:


Try using ajax

var searchRequest = null;
$("#field").autocomplete({
    maxLength: 5,
    source: function(request, response) {
        if (searchRequest !== null) {
            searchRequest.abort();
        }
        searchRequest = $.ajax({
            url: 'SearchTest.php',
            method: 'post',
            dataType: "json",
            data: {term: request.term},
            success: function(data) {
                searchRequest = null;
                response($.map(data.items, function(item) {
                    return {
                        value: item.name,
                        label: item.name
                    };
                }));
            }
        }).fail(function() {
            searchRequest = null;
        });
    }
});

JSON Response Example in SearchTest.php

<?php
header('Content-type: application/json');
echo '{"items":[{"name":"Ashok"},{"name":"Rai"},{"name":"Vinod"}]}';
?>

Demo Fiddle

Remote JSONP Demo




回答2:


the proper json format for this from php:

<?php
   echo '[ {"name1":"val1"},{"name2":"val2"} ]'; 
?>

From js wich means []-array of {} objects.

In my case for autocomlete widjet this works fine:

    $response="[";
    while($row = $res->fetch_assoc()){
        if($response !="[")$response.=",";
        $response.='{"label":"'.$row["fio"].'","value":"'.$row["id"].'"}';
    }
    $response.="]";

    echo $response;



回答3:


Maybe something wrong with the source parameter. Should it be '/Searchtest.php'?

http://api.jqueryui.com/autocomplete/#option-source




回答4:


Somthing like this is the best way. json_encode do all work for you.

    $result = $_mysqli->query(...);
    $rs = array();
    $pos = 0;
    while($row = $result->fetch_assoc()){
        $rs[$pos]["n1"] = $row["n1"];
        $rs[$pos]["n2"] = $row["n2"];
        ...
        $rs[$pos++]["nn"] = $row["nn"];

    }
    header('Content-type: application/json');
    echo json_encode($rs);


来源:https://stackoverflow.com/questions/17764554/jquery-autocomplete-populate-with-data-from-php-json

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!