我正在使用 devbridge https://www.devbridge.com/sourcery/components/jquery-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: 回调未定义 在 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。我不知道该怎么办。为了使用自动完成功能,我应该用 python 函数返回什么?我相信我的问题就在那里。
最佳答案
问题似乎出在 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")
关于javascript - Python 返回 jsonp 以进行自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32612728/