簡體   English   中英

Flex / ActionScript,PHP和XML錯誤

[英]Flex/ActionScript, PHP, and XML Error

我有一些使用Flex / ActionScript讀取的XML。 當我加載XML時,Flash Builder給我一個錯誤,提示Error: Unknown Property: 'EventTitle'. at mx.collections::ListCollectionView/http://www.adobe.com/2006/actionscript/flash/proxy::getProperty()[E:\\dev\\4.y\\frameworks\\projects\\framework\\src\\mx\\collections\\ListCollectionView.as:870]. Error: Unknown Property: 'EventTitle'. at mx.collections::ListCollectionView/http://www.adobe.com/2006/actionscript/flash/proxy::getProperty()[E:\\dev\\4.y\\frameworks\\projects\\framework\\src\\mx\\collections\\ListCollectionView.as:870]. 我將“ EventTitle”引用到的唯一位置是下面將其加載到列表中的位置。

當我從XML中刪除<Invite>部分時,它加載正常。 但是,一旦我再次添加它,就會給我錯誤。 下面是XML的結構:

 <Invites>
      <Invite>
        <EventTitle>HelloWorld</EventTitle>
      </Invite>
      <Invite>
        <EventTitle>HelloWorld2</EventTitle>
      </Invite>
    </Invites>

我正在使用PHP創建XML:

if ($_POST['method'] == "GET_INVITES") {
    $sql = mysql_connect("localhost:8889", "---------------", "--------------");
    if(!$sql) {
        die('Could not connect:' . mysql_error());
    }   

    mysql_select_db("Calendar", $sql);
    $getInvitesQuery = mysql_query("SELECT * FROM `Invites` WHERE `To`='" . $_POST['userID'] . "'");

    $result = "<Invites>";
    $result .= "<Result>SUCCESS</Result>";
    while($row = mysql_fetch_array($getInvitesQuery)){
        $result .= "<Invite>";
        $result .= "<FromID>" . $row['From'] . "</FromID>";
        $result .= "<EventTitle>" . $row['Title'] . "</EventTitle>";
        $result .= "<EventDay>" . $row['Day'] . "</EventDay>";
        $result .= "<EventHour>" . $row['Hour'] . "</EventHour>";
        $result .= "<EventMinute>" . $row['Minute'] . "</EventMinute>";
        $result .= "</Invite>";
    }
    $result .= "</Invites>";    
    print($result); 
}

我在Flex / ActionScript中使用HTTPService將XML文件從PHP文件加載到列表中。 這是代碼:

<s:HTTPService id="getInvites" result="getInvitesResult(event)" method="POST" url="http://localhost/invite.php" useProxy="false">
            <s:request xmlns="">
                <method>GET_INVITES</method>
                <userID>{my_id.text}</userID>
            </s:request>
        </s:HTTPService>

<s:List id="invites" x="5" y="295" width="310" change="rowSelected(event)">
        <s:dataProvider>
            <s:ArrayCollection source="{getInvites.lastResult.Invites.Invite.EventTitle}"/>
        </s:dataProvider>
    </s:List>

我一直在努力,並在2-3小時內想出解決方案。 任何幫助深表感謝。

謝謝,雅各布

我認為這里有幾個問題:

不要在e4x表達式中包含XML對象的根標記

使用e4x表達式時,不應包含XML的根標記。 因此,嘗試更改此行:

<s:ArrayCollection source="{getInvites.lastResult.Invites.Invite.EventTitle}"/>

至:

<s:ArrayCollection source="{getInvites.lastResult.Invite.EventTitle}"/>

作為替代方案,您可以向XML添加另一個根標簽,以使原始表達式有效:

<root>
    <Invites>
       ...
    </Inivtes>
</root>

向列表提供適當的dataProvider

e4x表達式“ Invite.EventTitle”(在XML上使用時)將返回XMLList對象。 這不適合用作列表的dataProvider。 列表的dataProvider屬性需要實現IList接口的內容。 幸運的是,您所需要做的就是創建一個XMLListCollection對象。 您將需要重構代碼,以便可以創建此XMLListCollection

一種方法是將resultfault處理程序添加到HTTPService 實際上,這比使用lastResult屬性更好。 原因是當您的應用程序多次調用該服務時,使用lastResult可能未引用正確的結果。

result事件處理程序中,您可以創建新的XMLListCollection並將其設置在列表中:

<s:HTTPService id="getInvites" result="handleResult(event)" fault="handleFault(event)" resultFormat="e4x" ... />

private function handleResult(event:ResultEvent):void
{
    var xml:XML = event.result as XML;
    var xmlList:XMLList = xml.Invite.EventTitle; // an XML "array" of event titles
    var xmlCollection:XMLListCollection = new XMLListCollection(xmlList);
    // now set xmlCollection as the dataProvider for the list
    invites.dataProvider = xmlCollection;
}

注意,在上文中,我還將HTTPServiceresultFormat指定為“ e4x”。

上面的代碼是從內存中編碼的,因此這里或那里可能有錯誤;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM