【问题标题】:WordPress & suggest.js - Ajax query receives 200 response but empty contentWordPress 和Suggest.js - Ajax 查询收到 200 响应但内容为空
【发布时间】:2016-02-29 20:48:24
【问题描述】:

上下文

我正在使用 WordPress 的Suggest.js 功能在文本字段上创建自动建议功能。当您在字段中键入每个字符时,将向服务器发送一个 Ajax 查询,该服务器查询 SQL 表中的特定变量。响应应该是与查询对应的所有变量。

代码

代码如下:

/DISBLE UPDATE NOTIFICATIONS

add_action('wp_enqueue_scripts', 'se_wp_enqueue_scripts');
function se_wp_enqueue_scripts() {
    wp_enqueue_script('jquery');
    wp_enqueue_script('suggest');
}

add_action('wp_head', 'se_wp_head');
function se_wp_head() {
?>
<script type="text/javascript">
    var se_ajax_url = '<?php echo admin_url('admin-ajax.php'); ?>';

    jQuery(document).ready(function() {
        jQuery('#se_search_element_id').suggest(se_ajax_url + '?action=se_lookup');
    });
</script>
<?php
}

function se_lookup() {
    global $wpdb;

    $search = like_escape($_REQUEST['q']);

    $query = 'SELECT DISTINCT meta_value FROM wp_usermeta
        WHERE meta_key LIKE \'' . $search . '%\'
        ORDER BY post_title ASC';
    foreach ($wpdb->get_results($query) as $row) {
        $meta_value = $row->meta_value;



        // echo ' (' . $meta_value . ')' . "\n";

        echo $meta_value;
    }
    die();
}

add_action('wp_ajax_se_lookup', 'se_lookup');
add_action('wp_ajax_nopriv_se_lookup', 'se_lookup');

结果

我收到 200 响应,好像查询正常工作。但是,响应内容为空。我期待 echo $metavalue 返回我正在寻找的变量。但是,我尝试了echo "test",但它也返回空。我已经安装了一个 Chrome 扩展来查看开发工具中的 Ajax 调用/响应,这是我在响应中看到的:

response: Object
_transferSize: 515
bodySize: 33
content: Object
compression: -33
mimeType: "text/html"
size: 0
__proto__: Object
cookies: Array[0]
headers: Array[17]
headersSize: 482
httpVersion: "HTTP/1.1"
redirectURL: ""
status: 200
statusText: "OK"
__proto__: Object
startedDateTime: "2016-02-29T20:34:25.603Z"
time: 385.04700001794845

任何想法为什么响应内容对象不包含任何内容?

【问题讨论】:

  • 好吧,您将您的响应作为单个整体字符串倾倒。例如如果建议结果是 eggplantparmesan,则您通过 blob eggplantparmesan 发送,因为每行查询结果之间没有分隔符。您需要修改您的脚本以输出与 .suggest() 插件所期望的格式相同的数据。
  • 这实际上是我阻止的下一个地方 - 虽然下面的答案给了我正确的 Ajax 响应,但我没有看到我的表单输入下方出现下拉列表。表单 HTML 如下所示:&lt;input type="text" id="se_search_element_id" name="fname"&gt;。从 wordpress 中建议()的其他实现来看,我认为不需要特定的格式......知道问题可能在这里吗?我在这里创建了一个新问题:stackoverflow.com/questions/35711390/…

标签: javascript php jquery ajax wordpress


【解决方案1】:

您正在按 post_title(即 ORDER BY post_title ASC)对结果进行排序,但表 wp_usermeta 没有列 post_title

【讨论】:

  • 你明白了 - 删除 ORDER BY 会产生正确的内容。
猜你喜欢
  • 2021-08-15
  • 2012-02-03
  • 2015-11-04
  • 1970-01-01
  • 1970-01-01
  • 2020-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多