【发布时间】: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
任何想法为什么响应内容对象不包含任何内容?
【问题讨论】:
-
好吧,您将您的响应作为单个整体字符串倾倒。例如如果建议结果是
egg、plant和parmesan,则您通过 blobeggplantparmesan发送,因为每行查询结果之间没有分隔符。您需要修改您的脚本以输出与 .suggest() 插件所期望的格式相同的数据。 -
这实际上是我阻止的下一个地方 - 虽然下面的答案给了我正确的 Ajax 响应,但我没有看到我的表单输入下方出现下拉列表。表单 HTML 如下所示:
<input type="text" id="se_search_element_id" name="fname">。从 wordpress 中建议()的其他实现来看,我认为不需要特定的格式......知道问题可能在这里吗?我在这里创建了一个新问题:stackoverflow.com/questions/35711390/…
标签: javascript php jquery ajax wordpress