【问题标题】:Jquery autocomplete plugin not showing success responseJquery自动完成插件不显示成功响应
【发布时间】:2012-08-08 08:24:13
【问题描述】:

我正在使用这样的 jquery 自动完成插件

$( "#city" ).autocomplete({
            source: function( request, response ) {
                $.ajax({
                    url: "http://www.abc.com/test.php",
                    dataType: "jsonp",
                    data: {
                        featureClass: "P",
                        style: "full",
                        maxRows: 12,
                        name_startsWith: request.term
                    },
                    success: function( data ) {
                        alert("hello");
                    }
                });
            },
            minLength: 2,
            select: function( event, ui ) {
                log( ui.item ?
                    "Selected: " + ui.item.label :
                    "Nothing selected, input was " + this.value);
            },
            open: function() {
                $( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
            },
            close: function() {
                $( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
            }
        });

我没有收到任何关于成功的警告框。

firefox 显示我得到这个作为响应

[{"label":"mark2","value":1},{"label":"abc1","value":20}]

它是否期望其他任何回报

【问题讨论】:

  • 为什么是dataType:jsonp?你有跨域问题吗?

标签: javascript jquery jquery-plugins autocomplete


【解决方案1】:

鉴于example you've taken this from 工作正常,并且使用jsfiddle 复制相同的示例按预期工作,你的那个不工作的原因很可能是你的页面其他地方有一个javascript错误,它正在停止进一步的javascript执行.

另外,我复制了这个例子,只是在成功回调中添加了一个 alert - 这也是 works fine 但是你应该注意 jQueryUI 自动完成的文档指出:

在请求期间提供自定义源回调以处理错误时,这一点很重要。 即使遇到错误,您也必须始终调用响应回调。这可确保小部件始终具有正确的状态。

这不是你的错误,但值得注意!


编辑 我突然想到,如果您的 ajax 调用实际上正在生成服务器端错误 (http500),那么您将永远不会输入 success 回调,也永远不会收到警报。尝试在 ajax 调用中添加错误回调,看看是否是这种情况:

$.ajax({
    url: "http://www.abc.com/test.php",
    dataType: "jsonp",
    data: {
        featureClass: "P",
        style: "full",
        maxRows: 12,
        name_startsWith: request.term
    },
    success: function( data ) {
        alert("hello");
    },
    error: function (xhr, textStatus, errorThrown){
        alert("error: " + errorThrown);
    }
});

【讨论】:

  • 该示例在我的网站上也运行良好,但唯一的问题是当我将 URL 更改为我的 url 时,它不起作用。我只想知道http://ws.geonames.org/searchJSON URL 返回的是什么类型的数据,这样我也可以返回相同的数据。目前我的数据返回看起来像上面的问题
  • 您可以通过使用浏览器执行获取请求(例如/ws.geonames.org/…)轻松检查geonames 服务的返回。但与其说是返回的内容使该示例起作用,不如说是它们如何将结果映射到 jQueryUI 自动完成所期望的格式
  • 这就是我想知道我的示例中的结果有什么问题。我的网址返回此[{"label":"mark2","value":1},{"label":"abc1","value":20}]。连那个警告框都没有出现
  • @john110016 - 您的方法的响应与未显示的警报无关 - 正如我在回答中所说,如果您没有收到警报,那是因为有一个 javascript 代码中某处的错误。使用 jsfiddle.net 重新创建您遇到的问题,它会更容易为您提供帮助!
  • 如果我使用与 geonames 相同的 URL,那么它可以正常工作。所以这意味着没有其他错误。但是,如果我使用我的 URL,那么我不会收到警报框。没关系还是你仍然说我有其他错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多