Получить xml-данные из веб-сервиса через магазин в Sencha Touch - PullRequest
1 голос
/ 11 января 2012

Я новичок в Sencha Touch и пытаюсь понять, как он работает с веб-сервисами.Мой следующий код прекрасно работает с xml-файлом, размещенным на моем локальном веб-сервере.Когда я пытаюсь работать с публичным веб-сервисом, я ничего не получаю.Это странно, потому что xml-файлы абсолютно одинаковы и отличается только одна строка кода.Я имею в виду, что если разместить следующий xml-файл на веб-сервере и установить его в качестве URL-адреса прокси, все будет в порядке, и данные будут показаны.

Вот мой js-код:

Ext.require([
    'Ext.Panel',
    'Ext.tab.Panel',
    'Ext.Ajax'
]);

Ext.application({
    name: 'Sencha',

    launch: function() {
        Ext.regModel('XMLUser', {
          fields: ['ID', 'CUSTOMERID', 'TOTAL']
        });
        var XMLStore = new Ext.data.Store({
            model: 'XMLUser',
            implicitIncludes: true,
            method:'get',
            proxy: {
                type: 'ajax',
                url : 'http://www.thomas-bayer.com/sqlrest/INVOICE/605',
                //url: 'test1.xml',
                reader: {
                    type  : 'xml',
                    record: 'INVOICE'
                }
            },
            autoLoad: true
        });
        var XMLTpl = new Ext.XTemplate(
            '<tpl for=".">',
                '<div class="id-class" id="{ID}">{ID}',
                '<div>{CUSTOMERID}',
                '<div>{TOTAL}',
            '</tpl>'
        );

        Ext.create("Ext.TabPanel", {
            fullscreen: true,
            tabBarPosition: 'bottom',
            items: [
                {
                    xtype: 'list',
                    title: 'Blog',
                    iconCls: 'home',
                    itemTpl: XMLTpl,
                    store: XMLStore,
                    singleSelect : true
                }
            ]
        }).setActiveItem(0);
    }
});

Вот пример XML-файла (и вы получите его по адресу: http://www.thomas -bayer.com / sqlrest / INVOICE / 605 ):

<?xml version="1.0"?><INVOICE xmlns:xlink="http://www.w3.org/1999/xlink">
    <ID>605</ID>
    <CUSTOMERID xlink:href="http://www.thomas-bayer.com/sqlrest/CUSTOMER/505/">505</CUSTOMERID>
    <TOTAL>209505</TOTAL>
</INVOICE>

1 Ответ

0 голосов
/ 04 декабря 2012

Вы должны настроить php-прокси для пересечения, это пример моего прокси-сервера, который вызывает xml google webservice:

Модель:

 Ext.regModel('ModelTrajectoire', {
     fields: [
              {
                name: 'lat',
              },
              {
                 name: 'lng'
              }
             ]
  });

Магазин:

     var StoreTrajectoire = new Ext.data.Store({
        model  : 'ModelTrajectoire',
        autoLoad: true,
        storeId: 'StoreTrajectoire',
        proxy: {
            type:'ajax',
            url: 'proxy.php',
            reader: {
                type: 'xml',
                record: 'step'
            }
        }
    });

proxy.php:

// type de retour
 header('Content-type: text/xml');
 // URL
 $requestURL = "http://maps.googleapis.com/maps/api/directions/xml?origin=Chicago,IL&destination=Los+Angeles,CA&sensor=false" ;
 //Getting data from URL requested
 $handle = fopen($requestURL, "r");
 if ($handle) {
while (!feof($handle)) {
    $buffer = fgets($handle, 4096);
    echo $buffer;
}
fclose($handle);
}

это сработало для меня nikel

...