Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.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
Php jQuery自动完成(devbridge)Ajax服务器端服务URL搜索文件_Php_Jquery_Ajax_Autocomplete - Fatal编程技术网

Php jQuery自动完成(devbridge)Ajax服务器端服务URL搜索文件

Php jQuery自动完成(devbridge)Ajax服务器端服务URL搜索文件,php,jquery,ajax,autocomplete,Php,Jquery,Ajax,Autocomplete,我正在使用带有ajax选项的DevBridge jQuery自动完成插件(使用serviceURL而不是查找)。我有一个php文件,可以查询db(WordPress FYI),并获得所有结果。因此,当用户在“我的自动完成”字段中键入时,将显示所有结果,并突出显示他们的查询。显然,我的服务器端脚本应该处理搜索并仅返回基于用户即时输入的过滤结果。我只是不知道该怎么做 我在网上找到了大量的帖子,说明这是应该如何工作的,但找不到任何serviceURL文件的工作示例,该文件根据用户键入的内容返回过滤结果

我正在使用带有ajax选项的DevBridge jQuery自动完成插件(使用serviceURL而不是查找)。我有一个php文件,可以查询db(WordPress FYI),并获得所有结果。因此,当用户在“我的自动完成”字段中键入时,将显示所有结果,并突出显示他们的查询。显然,我的服务器端脚本应该处理搜索并仅返回基于用户即时输入的过滤结果。我只是不知道该怎么做

我在网上找到了大量的帖子,说明这是应该如何工作的,但找不到任何serviceURL文件的工作示例,该文件根据用户键入的内容返回过滤结果

这是我到目前为止的代码

我的jQuery

$('#product_sku_autocomplete').autocomplete({
      serviceUrl: '/blah/blah/ajax-product-sku.php', 
      minChars: 1,
      onSelect: function (suggestion) {
          alert('You selected: ' + suggestion.value + ', ' + suggestion.data);
      }
  });
我的ajax-product-sku.php文件的内容。这将获取所有“产品”中自定义字段(sku)的所有元值

  if ( ! defined('ABSPATH') ) {
    require_once( '../../../../wp-load.php' );
  }

  global $wpdb;

  $term = $_GET['query'];

  $query = $wpdb->get_col( $wpdb->prepare( "
        SELECT pm.meta_value FROM {$wpdb->postmeta} pm
        LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id
        WHERE pm.meta_key = %s 
        AND p.post_status = %s 
        AND p.post_type = %s
    ", 'sku', 'publish', 'products' ) );

    $reply = array();
    $reply['query'] = $term;
    $reply['suggestions'] = array();

    foreach ($query as $sku) {
      $reply['suggestions'][] = array(
          "value" => $sku,
          "data" => $sku
      );
    }

    echo json_encode($reply);
如果我直接访问ajax-product-sku.php,结果会是

{"query":null,"suggestions":[{"value":"52N242","data":"52N242"},{"value":"52F230","data":"52F230"},{"value":"52F235","data":"52F235"}]}
因此,我得到了结果的完整列表(据我所知,格式正确),自动完成字段会检索这些结果,但当您在自动完成字段中键入时,它会显示所有结果,而不仅仅是与用户键入的结果相匹配的结果


我怀疑我需要在db$query语句中的某个地方添加$term var,但不确定如何添加。非常感谢您的帮助。

我想我已经得到了。非常简单的解决方案,但我的sql切块明显不足。需要向sql语句中添加类似的条件。下面是修改后的ajax-product-sku.php文件内容

如果有人从编码或性能的角度有更有效的方法来处理这个问题,我欢迎大家了解

ajax-product-sku.php

  if ( ! defined('ABSPATH') ) {
    require_once( '../../../../wp-load.php' );
  }

  global $wpdb;

  $term = $_GET['query']; // this is the var that autocomplete sends as users type.
  //$term = '1';

  $query = $wpdb->get_col( $wpdb->prepare( "
        SELECT pm.meta_value FROM {$wpdb->postmeta} pm
        LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id
        WHERE pm.meta_key = %s
        AND p.post_status = %s
        AND p.post_type = %s
        AND pm.meta_value LIKE '%{$term}%'
    ", 'sku', 'publish', 'products' ) );

    $reply = array();
    $reply['query'] = $term;
    $reply['suggestions'] = array();

    foreach ($query as $sku) {
      $reply['suggestions'][] = array(
          "value" => $sku,
          "data" => $sku
      );
    }

    echo json_encode($reply);


我想我明白了。非常简单的解决方案,但我的sql切块明显不足。需要向sql语句中添加类似的条件。下面是修改后的ajax-product-sku.php文件内容

如果有人从编码或性能的角度有更有效的方法来处理这个问题,我欢迎大家了解

ajax-product-sku.php

  if ( ! defined('ABSPATH') ) {
    require_once( '../../../../wp-load.php' );
  }

  global $wpdb;

  $term = $_GET['query']; // this is the var that autocomplete sends as users type.
  //$term = '1';

  $query = $wpdb->get_col( $wpdb->prepare( "
        SELECT pm.meta_value FROM {$wpdb->postmeta} pm
        LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id
        WHERE pm.meta_key = %s
        AND p.post_status = %s
        AND p.post_type = %s
        AND pm.meta_value LIKE '%{$term}%'
    ", 'sku', 'publish', 'products' ) );

    $reply = array();
    $reply['query'] = $term;
    $reply['suggestions'] = array();

    foreach ($query as $sku) {
      $reply['suggestions'][] = array(
          "value" => $sku,
          "data" => $sku
      );
    }

    echo json_encode($reply);