Python为autocomp返回jsonp

2024-04-24 04:49:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用devbridgehttps://www.devbridge.com/sourcery/components/jquery-autocomplete/的autocomplete。 我试图在同一台服务器中,但在不同的端口中获取json数据。所以我有跨域的问题。关于这个问题,我试过并读过很多不同的方法,但我无法解决它。我有一个python函数,它返回:

formatted_codes = {'query': query, 'suggestions':jsonData, 'data': jsonData}
data = json.dumps(formatted_codes)
return HttpResponse("callback(%s);"%data,mimetype="application/javascript")

我尝试在自动完成中使用它:

$(function(){
options = {
    serviceUrl:'http://linkname/apps/getSuggestions/start_auth?record_id=4dfcb2eb-1c71-4da1-8b3e-cbf4918a042;query=can;',

   // jsonpCallback: 'callback',
    dataType: 'jsonp',
    cache: false,
    crossDomain: true,
    success: function(data) {


                    return { value: data.suggestions};

    },
      error:function(jqXHR, textStatus, errorThrown){
        alert(errorThrown);
      }
};
a = $('#query').devbridgeAutocomplete(options);

})

但它不起作用。它说ReferenceError:callback没有定义 在firebug中我可以看到python函数的结果是:

callback({'query': 'can', 'suggestions': ['Cane', 'Canal', 'Candy', 'Canis', 'Canoe', 'Canada', 'Canary', 'Canola', 'Cantil', 'Decane', 'Toucan', 'Candida', 'Candiru', 'Candoia', 'Canidae', 'Cannula', 'Indican', 'Pelican', 'Scanner', 'Acanthis'], 'data': ['Cane', 'Canal', 'Candy', 'Canis', 'Canoe', 'Canada', 'Canary', 'Canola', 'Cantil', 'Decane', 'Toucan', 'Candida', 'Candiru', 'Candoia', 'Canidae', 'Cannula', 'Indican', 'Pelican', 'Scanner', 'Acanthis']});

我还尝试了jsonCallback:'callback',变量。我还尝试只返回文本而不返回json。我不知道该怎么办。为了使用autocomplete,我应该用python函数返回什么?我相信我的问题就在那里。你知道吗


Tags: 函数jsondatareturncallbackfunctionqueryautocomplete
2条回答

我设法找到了一个解决方案,但需要访问服务器。我使用了简单的json格式,并通过更改Apache2中的设置来解决跨域问题。 在/etc/apache2/sites available/default中,我在<;VirtualHost*:8000>;这行中添加了:

 Header always add Access-Control-Allow-Origin "*"
 Header always add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
 Header always add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"

也在里面

 <Directory /web/indivo_server>
 Header always add Access-Control-Allow-Origin "*"
 Header always add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
 Header always add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
 </Directory>

我还启用了mod\u头

sudo a2enmod headers

取消对行的注释http.conf文件或apache2.conf:

LoadModule headers_module modules/mod_headers.so 

重新启动apache2:

 sudo service apache2 restart

希望有帮助。你知道吗

问题似乎出在Python脚本的HttpResponse部分,其中引用了callback()。我不知道我是否完全理解这一点,但是返回纯JSON不是更好吗?比如:

formatted_codes = {'query': query, 'suggestions':jsonData, 'data': jsonData}
return HttpResponse(formatted_codes, mimetype="application/json")

我认为这应该足够了,即使没有json.dumps部分,但我不完全确定。所以你也可以返回:

return HttpResponse(json.dumps(formatted_codes), mimetype="application/json")

相关问题 更多 >