Я знаю, что это популярная тема, но мне еще предстоит найти ответ, который будет полностью всеобъемлющим.
Я пытаюсь создать простой способ для наших «клиентов» разместить карту Google на своем веб-сайте, на которой размещается позиция наших клиентов (или их подмножество) на карте. Клиенты находятся в базе данных MySQL, которая превращается в XML на лету с помощью PHP-скрипта (согласно примеру Google). Это отлично работает на моем веб-сайте, но когда я пытаюсь использовать его на другом веб-сайте, xmlHTTPRequest не может просматривать PHP, как в другом домене.
Я могу обойти это, написав другой файл PHP на другом домене, который просто читает файл PHP в исходном домене. Но не все наши клиенты будут работать PHP на своих серверах. Есть ли способ вернуть результаты XML из нашей базы данных с помощью JavaScript?
Несколько баллов:
JavaScript, который делает xmlHTTPRequest все еще сидит на нашем сервере – наши клиенты ссылаются на него из тега скрипта. Я думал, что этого может быть достаточно, но «происхождение» (в соответствии с Chrome, в любом случае) по-прежнему рассматривается как домен №2
Это замечательно: если я использую абсолютную ссылку в xmlHTTPRequest (например, request.open ('GET', 'http://mydomain.com/api/foo.php', true), то он не будет работать в IE, но если я использую относительную ссылку ('/api/foo.php'), она будет работать.
Я не знаю об этом, но могу ли я использовать JSON? Я видел: «script src =» http: //…./someData.js? Callback = some_func », но не знаю, как, я бы сделал« someData.js »похожим на JSON? (Я очень много думаю о функциях, которые, вероятно, неверны?).
Я попытался добавить заголовок («Access-Control-Allow-Origin: *»); к вершине PHP, которая выводит XML, но на самом деле это не так много, что я могу сказать!
Если я использую оболочку PHP на сервере клиента, то в чем преимущество использования запроса cURL, а не просто file_get_contents или fopen?
Извините, много вопросов, но любое руководство будет принята с благодарностью.
Массивное спасибо,
Мат
Простым способом этого является то, чтобы ваш PHP-скрипт возвращал что-то вроде:
callback_function(YOUR_DATA);
Затем в скрипте JS, включенном на сайт клиентов, вы динамически вставляете <script>
который имеет src
указывающий на ваш PHP-скрипт:
(function() { var scriptElement = document.createElement('script'); scriptElement.type = 'text/javascript'; scriptElement.async = true; scriptElement.src = 'http://example.org/yourScript.php?data=...'; var container = document.getElementsByTagName('script')[0]; container.parentNode.insertBefore(scriptElement, container); })();
Этот метод называется JSONP и должен делать именно то, что вы хотите;)
Еще один способ решения проблемы – разрешить междоменное XMLHttpRequest в политике безопасности контента. Но я думаю, что только Firefox 4 поддерживает это прямо сейчас.
Можете ли вы использовать JSON вместо XML? Если это так, ваш вариант 3), вероятно, будет вашим лучшим выбором. При таком подходе существуют риски безопасности, и их следует использовать только для известных и надежных источников.
More reading: http://www.codeproject.com/KB/aspnet/JSONToJSONP.aspx
JavaScript – это клиентская сторона, но базы данных нет. JavaScript не может напрямую извлекать из базы данных MySQL.