Я использую автозаполнение devbridge https://www.devbridge.com/sourcery/components/jquery-autocomplete/. Я пытаюсь получить данные json внутри одного и того же сервера, но в разных портах. Поэтому у меня проблема с кросс-доменом. Я пробовал и читал много разных подходов к этой проблеме, но я не могу ее решить. Так что у меня есть функция, которая возвращает питона это:Python return jsonp для автозаполнения
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({'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: «обратный вызов», переменным. Я также попытался вернуть только текст, а не json. Я не знаю, что делать. Что мне следует возвращать с помощью функции python для работы с автозаполнением? Я считаю, что моя проблема есть.
Нет, потому что проблема кросс-домена. Если вы вернете json, он заблокирован из-за безопасности. Таким образом, единственный формат, позволяющий избежать этого решения, - jsonp. Но jsonp, если я правильно понял, должен быть постучен в функции скрипта, например callbackFuncation ({'query': q, 'data': data ... и т. Д. – user1431148