Jquery自动完成插件未显示成功响应

时间:2012-08-08 08:24:13

标签: javascript jquery jquery-plugins autocomplete

我正在使用像这样的jquery autocomple插件

$( "#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}]

它还有什么其他回报

1 个答案:

答案 0 :(得分:3)

鉴于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);
    }
});