0

我正在使用 jquery-tokeninput 并且无法使其工作,当结果包含结果列表时,ajax 调用未进入成功方法。

我使用 jQuery 版本 1.9.1 和 tokeninput 版本 1.6.1

我正在使用这个 html 和 jquery 脚本:

<input type="text" class="selector" name="users">

$('.selector').tokenInput("/event/usersearch", { method: 'POST', minChars: 2 });

当我测试它时,我得到以下响应:

单击编辑字段为其提供焦点。

  • 下拉菜单显示文本“输入搜索词”

按字母 u。

  • 下拉菜单按预期消失,因为我将其设置为搜索字符

按字母 p。

  • 下拉菜单返回文本“正在搜索...”
  • 使用查询字符串“up”向服务器发送请求
  • 服务器响应此(内容类型:应用程序/json;charset=utf-8)(55 字节):

    [{id:2, name:'Superuser'},{id:3, name:'Bo Superduper'}]

    但下拉菜单仍显示“正在搜索...”

按字母 x

  • 使用查询字符串“upx”向服务器设置请求
  • 服务器响应(2 个字节):[]
  • 下拉菜单更改为“无结果”

因此,当服务器确实返回一个空列表时,一切正常,但如果返回记录,则用户界面不会显示这些项目。

我尝试了 GET 和 POST 请求...

我试图返回 [{id:2, name:"Superuser"},{id:3, name:"Bo Superduper"}] 但结果相同

我试图返回 [{id:"2", name:"Superuser"},{id:"3", name:"Bo Superduper"}] 但结果相同

我试图返回 [{"id":"2", "name":"Superuser"},{"id":"3", "name":"Bo Superduper"}] 但结果相同

在 tokeninput java 脚本文件中,我在 ajax 成功函数的第一行设置了一个断点:

// Attach the success callback
ajax_params.success = function(results) {
cache.add(cache_key, $(input).data("settings").jsonContainer ? results[$(input).data("settings").jsonContainer] : results);

并且不会在包含项目的请求上调用它,但会调用返回空列表的请求。这解释了为什么“正在搜索...”保持打开状态,并且仅在返回空列表时才会更改。

所有请求都返回 http 状态 200 OK。

从字节数来看,utf-8 与 ascii 相同,所以它不应该是编码问题......

所以发送ajax请求,并返回但没有调用成功方法?

4

1 回答 1

0

您目前如何返回您的 JSON?如果 ajax 调用没有调用成功,我猜你的响应格式不正确。例如,在您尝试过的 4 个版本中,只有最后一个是有效的。JSON 需要双引号,并且属性名称也需要用引号引起来。

我建议在源代码处自动生成您的 JSON 字符串,这样可以确保您获得正确的标头类型等。如果是php,你可以使用:

echo json_encode(//PHP Assoc Array Here);

于 2013-06-27T14:38:53.807 回答