2011-07-25 64 views
2

我知道问题标题看起来像重复,但我一直无法找到这个问题的答案。Jquery UI自动完成不显示结果

我正在使用Jquery UI的自动完成功能,我可以在调试器中看到正确的JSON数据。然而,没有东西回到文本框。

我的javascript:

<script type="text/javascript"> 
    $(document).ready(function() { 
     myAutoComplete("#<%= myTxtBox.ClientID %>", "AutoCompletePage.aspx"); 
    }); 

    function myAutoComplete(ObjectId, DataURL) { 
     $(ObjectId).autocomplete({ 
      source: function (request, response) { 
       $.ajax({ url: DataURL, dataType: 'jsonp', 
        data: { q: request.term, limit: 10 }, 
        success: function (data) { 
         response($.map(data, function (item) { 
          return { label: item[1], value: item[0], id: item[0]} 
         })) 
        } 
       }) 
      } 
     }); 
    } 

</script> 

从我AutoCompletePage.aspx页面的代码段:

foreach (DataRow dataRow in dataTable.Rows) 
{ 
    string[] cells = new string[] { dataRow[0].ToString(), dataRow[1].ToString() }; 
    output.Add(cells); 
} 

后来......

Response.Write(json.Serialize(output)); 

您可以在这张图片中即见JSON数据被返回,但没有发生任何事情发生在我的文本框。提前感谢任何能够提供帮助的人。

autocomplete results

+0

什么'myTxtBox'的定义是什么? – GalacticCowboy

回答

0

我中有你不应该在这里使用jsonp预感。 JSONP通常用于跨域请求。

看起来你是在同一个域中发出请求(另外,返回的数据可能没有回调函数可以调用),所以你应该使用正常的json

试着改变你的datatype参数json

$(ObjectId).autocomplete({ 
     source: function (request, response) { 
      $.ajax({ url: DataURL, dataType: 'json', 
       data: { q: request.term, limit: 10 }, 
       success: function (data) { 
        response($.map(data, function (item) { 
         return { label: item[1], value: item[0], id: item[0]} 
        })) 
       } 
      }) 
     } 
    }); 
+0

哇。我试过这么多的变种,有没有json/jsonp(也试过类型:POST),但是这个可以工作。感谢您的简单回答。我使用的是jsonp,因为它在jqueryui网站的例子中使用,但我想这是因为他们从不同的域中提取数据。再次感谢。 – WEFX

+0

@WEFX:没问题!很高兴帮助':)' –