Междоменный XML в Javascript из PHP

0

Я хочу отправить XML-данные из php (домен A) в удаленный файл javascript (домен B). Я не могу иметь их в одном домене, и я не могу иметь никаких других файлов в домене B.

Я читал о отправке объекта JSONP из php вместо XML, но, как я понял из учебника, мне нужен php-прокси-сервер в том же домене, где находится файл javascript. tutorial link (xhr.open("GET", "xmlproxy.php? url =" + escape (url), true); <= эта строка указывает мне, что xmlproxy.php должен находиться в том же домене, что и actuala javascript)

Любые предложения, как я могу это сделать?

ПОЗЖЕ ПОСЛЕ THW ответ

Теперь у меня есть следующий пример кода:

Файл testlog.php

<?php header('Access-Control-Allow-Origin: *');
    print "<Logs><Log><id>Test Log</id></Log></Logs>";
?>

Функция javascript, вызываемая при загрузке страницы:

function getTestLog() {
    alert("Gets here!");
    $.ajax({
        url: "anotherdomain/testlog.php",
        data: requestVars,
        dataType: 'xml',
        success: function(xml){
            alert(xml);
        },
        error: function (xhr, err) {
            alert("Error: " + xhr.readyState + "\nstatus: " + xhr.status + "\nerror:" + err);
            alert("responseText: " + xhr.responseText);
        }
    });
}

Проблема в том, что он не попадает в аякс

  • 0
    JSONP не требует от вас использования прокси ... Скажите, пожалуйста, сколько данных вам нужно передать? Это важно.
  • 0
    Представьте себе плейлист из 100 треков, и для каждого трека будет указан исполнитель, название трека и продолжительность. Я не могу точно оценить точный размер блока данных, но это самое близкое, что я могу придумать. Спасибо, что ответили, кстати. Примечание: у меня есть доступ к файлам php и javascript, но я не могу добавить другие файлы в тот же домен, где находится javascript.
Теги:
cross-domain

1 ответ

0
Лучший ответ

Если вы управляете PHP, который выводит XML, вы можете использовать CORS.

По умолчанию Javascript может открывать только ресурсы из домена, который был загружен. Другие ресурсы должны позволять загружать их Javascript в другом домене.

Для этого добавьте заголовок в PHP-Script:

header('Access-Control-Allow-Origin: http://javascript-domain.tld');

Или разрешить загрузку XML из любого места:

header('Access-Control-Allow-Origin: *');

Вы используете jQuery, и здесь может возникнуть проблема, если вы не отправляете правильный тип контента из PHP.

header('Content-Type: application/xml');

Чтобы проверить, что это кросс-домен, что он блокирует чтение, вы открываете консоль Javascript в браузере. Он должен выдать сообщение об ошибке. В Firefox это что-то вроде:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading 
the remote resource at http://domain.tld/path/to/resource. This can be fixed by 
moving the resource to the same domain or enabling CORS

Если вы получите запрос, он должен появиться в Network-Tab ваших инструментов разработчика, и вы можете проверить заголовки ответов HTTP.

Вот простой фрагмент JS с использованием XHR, он заставляет тип содержимого:

var xhr = new XMLHttpRequest;
xhr.overrideMimeType("application/xml");
xhr.addEventListener(
  'load',
  function (xhr) {
    return function () {
      if (xhr.status >= 200 && xhr.status < 400) {
        console.log(xhr.responseXML);
      }
    }
  }(xhr)
);
xhr.open('GET', 'http://php-domain.tld/script.php');
xhr.setRequestHeader("Accept", "application/xml");
xhr.send();
  • 0
    Я отредактировал свой вопрос с примерами кода, потому что я не могу заставить его работать. Спасибо за помощь ThW!
  • 0
    Не работает не очень полезное описание ошибки. Вам нужно отлаживать то, что не работает. Я добавил немного информации о том, как.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню