我一直在阅读和测试很多关于它的内容,并且无法通过我创建的REST服务使JQuery Autocomplete与JSONP一起工作。
这是我的javascript:
$( "#input" ).autocomplete({
source: function( request, response ) {
$.ajax({
url: "http://localhost:8080/Rest/api/suggest/",
dataType: "jsonp",
data: {
jsonpCallback : "p",
q: request.term
},
success: function( data ) {
response( $.map( data.suggestions, function( item ) {
return {
label: item.LABEL,
value: item.URI
}
}));
}
});
},
minLength: 2
});
JSONP对象将是包含在
中的标准JSON对象p({});
通过?jsonpCallback = p给REST API提供的回调函数。 javascript / html代码在http://localhost:8888服务器下本地运行。
要查看数据响应,我需要在我的javascript中定义“p”回调函数
function p(data){
alert(data.toSource());
}
如果我取消它没有任何作用,但我不明白的是为什么JQuery Autocomplete示例代码在没有任何回调函数的情况下工作,并且最重要的是为什么自动完成的下拉结果不显示。我应该怎么做回调函数才能使下拉自动完成功能起作用?
谢谢大家, 丹尼尔
答案 0 :(得分:1)
我相信jQuery会自动附加jsonCallback =?当数据类型为'jsonp'时。它使用随机数作为回调函数名称,但在这种情况下,success:函数用作回调函数。您的函数p()是否曾被调用过?它也不应该被引用。它是一个函数引用,而不是字符串。
我不想这样做:
data: {
jsonCallback : "p"
但这意味着你的REST服务需要更聪明一些,并获取jsonCallback cgi参数并使用该值作为json的函数包装器。
更新@Daniele
Re:“我如何知道Jquery为回调函数分配的随机名称?”
这取决于您使用的REST服务编程语言。这是两个例子,Perl和PHP:
#!/usr/bin/perl
use CGI ":cgi";
$jsonCallback = $q->param('jsonCallback');
$json = ...
print header(
-type => 'application/json'
);
print $jsonCallback . '(' if $jsonCallback;
print $json;
print ')' if $jsonCallback
PHP
<?php
$jsonCallback = $_GET['jsonCallback'];
$json = ...
echo $jsonCallback . '(';
echo $json;
echo ')';
?>