我已经阅读和测试了很多关于它的内容,但是无法通过我创建的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对象将是包装在
p({});
通过?jsonpCallback=p提供给REST API的回调函数。javascript/html代码在http://localhost:8888服务器上本地运行。
要查看数据响应,我需要在javascript中定义"p“回调函数
function p(data){
alert(data.toSource());
}
如果我把它去掉,什么都不能用,但我不明白的是,为什么JQuery Autocomplete示例代码没有任何回调函数就能工作,最重要的是为什么下拉结果表单自动完成不能显示。为了让下拉自动完成功能正常工作,我应该如何处理回调函数?
谢谢大家,Daniele
发布于 2012-05-08 19:59:51
我相信jQuery会自动附加jsonCallback=?当数据类型为'jsonp‘时。它使用一个随机数作为回调函数名,但在本例中,success: function用作回调。你的函数p()被调用过吗?它也不应该被引用。它是一个函数引用,不是一个字符串。
我就不说这个了:
data: {
jsonCallback : "p"
但这意味着您的REST服务需要更智能一点,获取json cgi参数并将该值用作jsonCallback的函数包装器。
邮箱: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 ')';
?>
https://stackoverflow.com/questions/10499728
复制相似问题