首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >JSONP和JQUERY自动完成

JSONP和JQUERY自动完成
EN

Stack Overflow用户
提问于 2012-05-08 13:37:51
回答 1查看 5K关注 0票数 2

我已经阅读和测试了很多关于它的内容,但是无法通过我创建的REST服务让JQuery Autocomplete与JSONP协同工作。

下面是我的javascript:

代码语言:javascript
运行
AI代码解释
复制
$( "#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对象将是包装在

代码语言:javascript
运行
AI代码解释
复制
p({});

通过?jsonpCallback=p提供给REST API的回调函数。javascript/html代码在http://localhost:8888服务器上本地运行。

要查看数据响应,我需要在javascript中定义"p“回调函数

代码语言:javascript
运行
AI代码解释
复制
 function p(data){
        alert(data.toSource());
    }

如果我把它去掉,什么都不能用,但我不明白的是,为什么JQuery Autocomplete示例代码没有任何回调函数就能工作,最重要的是为什么下拉结果表单自动完成不能显示。为了让下拉自动完成功能正常工作,我应该如何处理回调函数?

谢谢大家,Daniele

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-08 19:59:51

我相信jQuery会自动附加jsonCallback=?当数据类型为'jsonp‘时。它使用一个随机数作为回调函数名,但在本例中,success: function用作回调。你的函数p()被调用过吗?它也不应该被引用。它是一个函数引用,不是一个字符串。

我就不说这个了:

代码语言:javascript
运行
AI代码解释
复制
data: {
   jsonCallback : "p"

但这意味着您的REST服务需要更智能一点,获取json cgi参数并将该值用作jsonCallback的函数包装器。

邮箱:Daniele@更新

Re:“我如何知道Jquery分配给回调函数的随机名称?”

这将取决于您的REST服务所使用的编程语言。这里有两个例子,Perl和PHP:

代码语言:javascript
运行
AI代码解释
复制
#!/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

代码语言:javascript
运行
AI代码解释
复制
 <?php
     $jsonCallback = $_GET['jsonCallback'];
     $json = ...
     echo $jsonCallback . '(';
     echo $json;
     echo ')';
  ?>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10499728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档