2

所有,我有以下代码,它基本上是一个在加载 DOM 时在其中加载一些搜索词的函数:

window.myAutocompleteFunction = function(){
return ['Test Saying','sit amet consectetur adipiscing','elit Nulla et justo'];
};

这适用于我的实时搜索和正确更新。我正在尝试根据我的数据库中的一些信息填充这些值。我试图更新我的代码以使用 .get 函数来填充我的返回值,我试图让它看起来像这样:

window.myAutocompleteFunction = function(){
$.get('http://localhost/website/load_users.php', function(data) {
    alert(data);
    return [data];
});
};

它尝试加载用户,在我的警报中它与手动输入时相同,但由于某种原因,当我进行搜索时它不起作用。知道如何从我的文件中获得相同的结果并使搜索工作相同吗?

编辑:我的 load_users.php 文件中现在唯一的内容如下:

'Test Saying'、'sit amet consectetur adipiscing'、'elit Nulla et justo'

我将尝试用数据库值填充它,但现在只是想让它工作。

另一个编辑:我还尝试使我的代码如下所示,以查看它是否有效:

window.myAutocompleteFunction = function(){
jQuery.get('http://localhost/okyne/load_users.php', function(data) {
    alert(data);
    return ['Test Saying','sit amet consectetur adipiscing','elit Nulla et justo'];
});
};

这也不起作用,所以我不确定为什么它不起作用,到目前为止唯一对我有用的是我提供的第一个代码片段。

非常感谢您提供的任何帮助!

4

2 回答 2

1

$.get不能返回这样的值,因为它是异步运行的,浏览器开始评估它,继续前进并以那个 fn 结束。在它完成之前。此外,该特定return内容将针对内部成功回调函数,而不是自动完成函数。您必须加载数据并在成功回调中创建该函数。

这是一个模型示例。http://jsfiddle.net/Nf2UD/

注意我使用 setTimeout 来确保 ajax 调用已完成,但您需要确保在页面初始化期间调用 randomFn,以确保在尝试使用自动完成之前它已运行。您可以通过几种方式检查这一点 - 使用全局变量来跟踪状态,检查自动完成功能是否未定义,...。事实上,这并不是异步方法的真正意义,但无论对你有用,我猜测。

function() randomFn {
    $.get('http://localhost/website/load_users.php', function(data) {
        alert(data);
        window.myAutocompleteFunction = function(){ return [data]; };
    });
};
于 2012-07-11T03:00:09.423 回答
0

尝试这个:

    function getScript(url,success){
        var script=document.createElement('script');
        script.src=url;
        var head=document.getElementsByTagName('head')[0],
        done=false;
        script.onload=script.onreadystatechange = function(){
        if ( !done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete') ) {
        done=true;
        success();
        script.onload = script.onreadystatechange = null;
        head.removeChild(script);
        }
        };
        head.appendChild(script);
    }

    getScript('http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js',function(){

        /* YOUR CODE GOES HERE AND IS EXECUTED AFTER JQUERY LOADS */

    });
于 2012-07-11T02:41:51.790 回答