Ext JS:如何将php的curl调用中的xml返回到Store中的extjs代理?

时间:2014-01-30 19:54:24

标签: php xml extjs proxy store

我是ExtJs和Web技术的新手,我几天要做的就是从我的php文件中获取响应,该响应会向服务器api发出curl请求,并返回一个xml格式对象。当我将此对象单独存储在xml文件中并将ExtJs存储的代理设置为

proxy: {
            type: 'ajax',
            url: 'app/apiCalls/data_suites.xml',
            autoload: 'true',
            autoSync: 'true',

            reader: {
                type: 'xml',
                root: 'data_suites',
                record: 'data_suite'
            }
        }

..它将数据加载到商店中,但是当我将代理更改为返回同一对象的.php文件时,它无法加载数据。

这是带有示例xml返回的.php文件:

$my_endpoint = XXXXXXX //myendpoint defined here

function curlCall($my_url){

    $header[] = 'Content-Type: application/x-www-form-urlencoded';

    //initializing curl object
    $curl = curl_init();
    //adding fields to the curl object to enter the site
    curl_setopt($curl, CURLOPT_URL, $my_url);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
    curl_setopt($curl, CURLOPT_HTTPGET, true);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_TIMEOUT, 40);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);

    //executing the curl call and getting data back
    $html = curl_exec($curl);

    curl_close($curl); // close the connection

    return $html;
}

$html = curlCall($my_endpoint);
echo $html;

//even tried returning as simple xml object but didnt work
//$xml = new SimpleXMLElement($html);
//echo $xml

我只更改了我的商店代理中的这一行,以尝试接收.php输出

url: 'app/apiCalls/data_suites.php',

这是我的示例“data_suites.xml”,这与我的浏览器显示的PHP返回为$ html相同。

<?xml version="1.0" encoding="UTF-8"?>
<data_suites>
   <data_suite id="6">
      <name>Test</name>
      <description>Test Described</description>
   </data_suite>
   <data_suite id="8">
      <name>Another Test</name>
      <description>Another Test Described</description>
   </data_suite>
</data_suites>

谢谢,如果事情不清楚,请告诉我。

2 个答案:

答案 0 :(得分:1)

尝试在php脚本中设置标题 像这样:

<?php
.
.
.
$html = curlCall($my_endpoint);
header("Content-type: text/xml");
echo $html;
?>

答案 1 :(得分:1)

您是否尝试将响应标头设置为XML?

header('Content-type: text/xml');之前

echo $html;,因为如果与其他内容类型一起发送,ExtJS的XML阅读器将无法将响应识别为XML。