PHP Post to ASP Form, вернуть результаты XML на страницу PHP. - PullRequest
0 голосов
/ 28 июля 2011

Настройка того, с чем мне нужно работать и что мне нужно, приведена ниже:

  • Мне предоставлена ​​форма ASP ( в другом домене )) который при отправке выводит результаты поиска в формате XML .

  • Я занимаюсь разработкой веб-сайта PHP ( в домене моей компании )

  • С этого сайта PHP мне нужно иметь возможность запросить указанную форму ASP и получить результаты XML, отправленные обратно на страницу PHP ( в домене моей компании )

  • Переменная "Клиент = *" должна быть отправлена ​​в форму ASP, чтобы она работала.

Что я пробовал до сих пор ...

  • jQuery.ajax, чтобы попытаться сделать обычный почтовый запрос, используя этот код:

    $.ajax({
    url: "http://www.example.com/xml/aspfile.asp",
    crossDomain: true,
    cache: false,
    dataType: ($.browser.msie) ? "text" : "xml",
    data: { Client: "clientname" etc },
    type: 'post',
    xhrFields: {
        withCredentials: true
    },
    error: function(){
        alert("error");
    },
    success: function(data){
        var xml;
        if (typeof data == "string") {
            xml = new ActiveXObject("Microsoft.XMLDOM");
            xml.async = false;
            xml.loadXML(data);
        } else {
            xml = data;
        }
    } });
    

Примечание:

Я пробовал много разных итераций приведенного выше кода от базовых запросов AJAX к более сложным, как указано выше.

Вышекод возвращает foошибка, которая является ошибкой, с которой я столкнулся совсем немного.

XML Parsing Error: no element found Location: moz-nullprincipal:{14ce834e-ef24-43f8-b338-7202241298a5} Line Number 1, Column 1:^

Что мне нужно

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

Большое спасибо заранее всем тем, кто публикует ответы за ваше время.

Редактировать: здесь запрошено, как выглядит XML

<quicksearchresults>
        <heading>
            <title1>River Cruises</title1>
            <title2>Quick Search</title2>
            <cruise_nos>732</cruise_nos>
            <earliest_date>01/08/11</earliest_date>
            <latest_date>01/09/11</latest_date>
            <river>Anywhere</river>
            <linename>Any</linename>
        </heading>
        <rivercruiselist>
            <holdate>28/08/11</holdate>
            <linename>The River Cruise Line</linename>
            <shipname>Esmerelda</shipname>
            <shiplink>url</shiplink>
            <cruisename>Cruise+The+Danube+to+Vienna+%26+Budapest</cruisename>
            <cruiselink>url</cruiselink>
            <river>Danube</river>
            <ratingicon>Images/BudgetIcon.png</ratingicon>
            <flyfrom>Linz</flyfrom>
            <flyback>linz</flyback>
            <cruisenights>7</cruisenights>
            <vacationdays>10</vacationdays>
            <lowprice>0</lowprice>
            <highprice>0</highprice>
            <flights>including Coach</flights>
            <soldout>Yes</soldout>
            <enquiryformlink>url</enquiryformlink>
            <enquiryformimage>Images/TravelEButton.png</enquiryformimage>
        </rivercruiselist>
</quicksearchresults>

1 Ответ

1 голос
/ 28 июля 2011

Используйте ваш сервер PHP в качестве прокси: вы делаете запрос AJAX на свою собственную страницу PHP, которая использует curl для получения XML из внешнего источника и возвращает его вам, чтобы вы могли его проанализировать.

var xml;
if (typeof data == "string") {
    xml = new ActiveXObject("Microsoft.XMLDOM");
    xml.async = false;
    xml.loadXML(data);
} else {
    xml = data;
}

Эта часть не обязательна, вы можете использовать селекторы jQuery для анализа XML.Судя по всему, ваш запрос не дает никаких результатов.Что производит alert(xml)?AFAIK, вы не можете сделать междоменную POST, вы можете сделать междоменную GET с некоторыми JSONP взломами.никогда не закрывался.

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

// post the contents of the form to our PHP proxy

    $.post("myproxy.php", $("#myform").serialize, function(data) {
    // do something with returned xml here.

    },"xml");

Пример прокси (myproxy.php):

 <?php 

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "http://www.remotedomain.com/api.php");
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, array(
            'client*' => 'something',
        ));
        $result = curl_exec($ch);
        curl_close($ch);
        echo $result;
 ?>
...