#javascript #autocomplete #same-origin-policy
#javascript #автозаполнение #политика того же происхождения
Вопрос:
Я внедряю автозаполнение YUI в свой проект. Я создал веб-сервис, который предоставляет предложения по автозаполнению. Все работает нормально, когда я развертываю свое приложение и веб-службу на одном компьютере. Но когда я развертываю веб-службу на другом компьютере, она не работает в Firefox (но она работает в IE). Я думаю, что из-за политики того же происхождения она не работает в Mozilla.
Вот мой код автозаполнения
<script type="text/javascript">
YAHOO.example.BasicRemote = function() {
// Using an XHRDataSource to connect to web service
var oDS = new YAHOO.util.XHRDataSource("http://host_other_than_my_machine/i2b2/services/AutocompleteService/getCodes");
// Set the responseType as XML
oDS.responseType = YAHOO.util.XHRDataSource.TYPE_XML;
// Define the schema of the delimited results
oDS.responseSchema = {
resultNode: 'code',
fields: ['value']
};
// Enable caching
oDS.maxCacheEntries = 0;
// Instantiate the AutoComplete
var oAC = new YAHOO.widget.AutoComplete("myInput", "myContainer", oDS);
return {
oDS: oDS,
oAC: oAC
};
}();
</script>
Мои вопросы
1) Является ли политика того же происхождения актуальной проблемой? Если да, то IE не привязан к той же политике, что и мой код, который работает в IE?
2) Как избавиться от этого? Я знаю, что некоторый php-код можно использовать для перенаправления запроса, но как я могу использовать его здесь?
~ Ajinkya.
Ответ №1:
Вероятно, ваша проблема связана с источником запроса AJAX, вам следует изучить это: безопасность запросов с перекрестным источником.
В принципе, для apache вам нужно будет добавить следующее в файл «host_other_than_my_machine» .htaccess:
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "http://trusted.site"
</IfModule>
Конечно, замена «http://trusted.site » с доменом, с которого вы будете делать запросы.
Редактировать: если вам нужно разрешить доступ для нескольких удаленных доменов, вы можете просто использовать:
Header set Access-Control-Allow-Origin "*"
Обычно это не должно быть проблемой безопасности, но обязательно тщательно рассмотрите ваш конкретный случай, т. Е. Если Вы предоставляете конфиденциальную информацию через ответы AJAX.
Комментарии:
1. Спасибо за предложение, но я не могу попробовать этот подход, поскольку он будет развернут на многих компьютерах, и я не уверен в их именах.
Ответ №2:
Использовал PHP-прокси, предоставленный Yahoo, и перенаправлял на него все запросы. http://developer .yahoo.com/javascript/howto-proxy.html