【问题标题】:jQuery Autocomplete from external server fails来自外部服务器的 jQuery 自动完成失败
【发布时间】:2012-09-20 03:45:11
【问题描述】:

您好,我正在使用jQuery Autocomplete Library(因为没有更好的词)尝试在我一直在处理的页面上实现基本的自动完成功能。通过基本上使用该页面上示例代码的修改版本,我已经设法通过从同一文件夹中的静态 html 页面获取 json 数据来使自动完成工作。那工作得很好。现在我正在尝试从 python 脚本中获取数据,该脚本在 google 应用引擎上本地实现,会吐出 json 数据。

以下是页面上原始输入的一些示例数据:

["foo", "bar"]

我已经用多种方法打印数据来验证数据格式是否正确(抱歉,我不知道有什么可靠的方法来测试它是否是有效的 json 数据)。

现在是代码!这是处理自动完成功能的实际功能:

function suggest(textbox_data){
    $(textbox_data).autocomplete({
        source : function (request, response) 
        {
            var source_url = "http://localhost:8081/developers/add/jqueryResponse";
            //var data = "hello world"

            $.ajax({
                url: source_url,
                dataType: 'json',
                success: function (data) { 
                    response(data);
                }
            });
        }
    });
}

我将所有内容都放入函数中的原因是因为我动态生成了文本框。只是为了让一切清楚,这是添加文本框的行。如果有人真的想要,我可以添加文本框生成的所有代码,但我很确定这不是问题。

$('#buttondiv').append('<div><label>Textbox #'+$counter+'</label><input type="text" name="textbox[]" class="textbox" value="" id="country" onkeyup="suggest(this);"/><div id="testdiv"></div></div>');

现在是错误消息!当我在 Firefox 中运行脚本时(在本地使用 $.ajax 功能时,Chrome 是一只母狗)在尝试访问包含 JSON 数据的网页时,我从 firebug 收到错误:

GET http://localhost:8081/developers/add/jqueryResponse 200 136ms   jquery.min.js (line 16)

在文件的第 16 行,基本上包含脚本中的所有内容,因此它并没有真正缩小范围。无论如何,请帮助!

【问题讨论】:

  • 您的 python 脚本是否允许 GET 访问 JSON 数据?您在 Firebug 中遇到了什么错误?
  • 是的,它允许 GET 访问,但我不确定这是否同样适用于 JSON 数据。我也不知道如何检查,我想我的后续问题是如何检查?
  • 还有!错误是我帖子中的最后一个“代码块”
  • 你可以试试url: source_url,type:"POST" , datatype:'json'看看有没有区别
  • 我得到了同样的错误,除了它在开始时说 POST。我也可能会提醒您,该错误很可能与自动完成 jquery 文件中的某个位置有关。

标签: jquery autocomplete


【解决方案1】:

您的成功处理程序不完整。看看Demo page.的源码

成功处理程序应如下所示:

success: function( data ) {

        response( $.map( data.geonames, function( item ) 
{

return {label: item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName,Value: item.name}
                        }));
                    }
                });

【讨论】:

  • 好的,谢谢!我会将其添加到我的代码中。但我还要提醒您,我设法使用了相同的代码,只是将 url 更改为“test.html”,这是我计算机上的本地 html 文档,只有一个 json 数据的示例列表,所以我不确定如果我需要那个(当然我仍然会添加它)
  • 如果上述方法不起作用,只需将beforeSend: function (x) { if (x &amp;&amp; x.overrideMimeType) { x.overrideMimeType("application/j-son;charset=UTF-8"); }' }, 添加到您的原始代码中即可。
  • 在您提到您遇到的错误之前,很难建议您真正需要做什么。
  • 我提到了错误!最后一个代码块!这是从萤火虫复制粘贴的
  • 另外,在添加一个 alert("test");到success: {}部分,我发现它从来没有被触发过,所以在尝试使用json访问页面时发生错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-24
  • 2012-02-11
  • 2012-11-15
  • 2011-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多