0

我有一个php/mysql后端和一个引导程序/ jQ前端。还有一个4小时的头痛。twitter引导问题2.3.2 typeahead无法正常工作

的表单元素看起来是这样的:

<input id="location_name" name="location_name" data-provide="typeahead" 
    autocomplete="off" type="text" placeholder="Location name" 
    class="input-xlarge" required="yes" value="" /> 

jQuery的是这样的:

$(document).ready(function(){ 
    $('#location_name').typeahead({ 

     'source': function (query,typeahead) { 
      var id = $("#area_id option:selected").attr('value'); 
      return $.get(
       '/app/event/location_name_typehead.php', 
       { 'location_name': encodeURIComponent(query), 'area_id' : id }, 
       function (data) { return data; } 
      ); 
     }, 
     'items': 4, 
     'minLength': 2 
    }); 
}); 

而且PHP是这样的:

<?php 
header('Content-type: text/json'); 
$location_name = $_REQUEST['location_name']; 
$area_id  = $_REQUEST['area_id']; 
//print_r($_REQUEST); 

// ... PDO setup ... 

$locations = $location_recs->fetchAll(PDO::FETCH_ASSOC); 

if(count($locations) == 0) { 
    echo '[]'; 
} else { 
    foreach ($locations as $location) { 
     $names[] = $location['location_name']; 
    } 
    echo '[ "'.implode('", "', $names).'" ]'; 
}; 
?> 

我用尽全力'application/json'和'text/json'作为返回类型,并使用typeahead.process(data)和jQuery j的变体对数据进行儿子解码以使该死的东西起作用。正在返回的搜索结果,即输入领域触发Ajax调用,并且文档返回看起来是正确的:

[ "Administration Block", "Science Block" ] 

谁能指出,拦着它的区分明显(我认为)的语法问题?

+0

您在输入属性中错过了'data-provide =“typeahead”'。那是一回事。我会看看我能否找到更多。 – SSaaM

+0

:-)是的,我已经有过几次。我把它放回去了,并且修改了顶部的代码 - 但仍然没有快乐。 – Dycey

+0

建议的话,***不要建立你自己的JSON!使用PHP的'json_encode'。很简单:'echo json_encode($ names);'。 –

回答

1

您无法从AJAX调用返回任何内容。它们是异步的,你需要做与回调中的数据相关的任何事情。

此外,typeahead希望source函数返回一个数组或调用作为第二个参数传递的函数。在你的情况下,你不能返回任何东西,因为它是异步的,所以你需要使用第二个参数。

'source': function (query,typeahead) { 
    var id = $("#area_id option:selected").attr('value'); 

    $.get('/app/event/location_name_typehead.php', { 
     'location_name': encodeURIComponent(query), 
     'area_id': id 
    }, function(data){ 
     typeahead(data); 
    }); 
}, 
+0

嘿嘿。做得好。 (我现在正式太老了,不能做全能...) – Dycey

+0

很高兴我能帮忙! :-D –