2009-02-28 16 views
0

Verileri ayrıştırmak ve bir PHP dosyasına bağlanmak için JSON kullanıyorum. Sorunun ne olduğundan emin değilim çünkü esnek bir çocuk oyuncağım. PHP İşteJSON Ayrıştırma FLEX ve PHP kullanılarak hata

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="535" height="345"> 
<mx:Script> 
<![CDATA[ 
import mx.events.DataGridEvent; 
import mx.controls.TextInput; 
import mx.rpc.events.ResultEvent; 
import mx.collections.ArrayCollection; 
import com.adobe.serialization.json.JSON; 

[Bindable] 
private var dataArray:ArrayCollection; 

private function initDataGrid():void 
{ 
    dataArray = new ArrayCollection(); 
    getData.send(); 
} 

private function getPHPData(event:ResultEvent):void 
{ 
    var rawArray:Array; 
    var rawData:String = String(event.result); 
    rawArray = JSON.decode(rawData) as Array; 
    dataArray = new ArrayCollection(rawArray); 
} 

private function sendPHPData():void 
{ 
    var objSend:Object = new Object(); 
    var dataString:String = JSON.encode(dataArray.toArray()); 
    dataString = escape(dataString); 
    objSend.setTutorials = "true"; 
    objSend.jsonSendData = dataString; 
    sendData.send(objSend); 
} 

private function updatedPHPDataResult(event:ResultEvent):void 
{ 
    lblStatus.text = String(event.result); 
} 

private function checkRating(event:DataGridEvent):void 
{ 
    var txtIn:TextInput = TextInput(event.currentTarget.itemEditorInstance); 
    var curValue:Number = Number(txtIn.text); 
    if(isNaN(curValue) || curValue < 0 || curValue > 10) 
    { 
    event.preventDefault(); 
    lblStatus.text = "Please enter a number rating between 0 and 10"; 
    } 
    } 
]]> 
</mx:Script> 
<mx:HTTPService id="getData" url="http://www.keishalexie.com/imd465/forum.php" 
useProxy="false" method="GET" resultFormat="text" 
result="getPHPData(event)"> 
<mx:request xmlns=""> 
    <getTutorials>"true"</getTutorials> 
    </mx:request> 
</mx:HTTPService> 
<mx:HTTPService id="sendData" url="http://www.keishalexie.com/imd465/forum.php" 
useProxy="false" method="GET" resultFormat="text" 
result="updatedPHPDataResult(event)"> 
</mx:HTTPService> 
<mx:Binding source="dgData.dataProvider as ArrayCollection" 
destination="dataArray"/> 
<mx:Panel x="0" y="0" width="535" height="345" layout="absolute" 
title="Forum"> 
    <mx:DataGrid id="dgData" x="10" y="10" width="495" height="241" 
    dataProvider="{dataArray}" creationComplete="{initDataGrid()}" 
    editable="true" itemEditEnd="{checkRating(event)}"> 
    <mx:columns> 
    <mx:DataGridColumn headerText="Name" dataField="name" editable="false"/> 
    <mx:DataGridColumn headerText="Author" dataField="author" width="115" 
     editable="false"/> 
    <mx:DataGridColumn headerText="Rating" dataField="rating" width="50" 
     editable="true" /> 
    </mx:columns> 
    </mx:DataGrid> 
<mx:Button x="10" y="259" label="UpdateDatabase" id="butUpdate" 
    click="{sendPHPData()}"/> 
    <mx:Label x="140" y="261" id="lblStatus"/> 
</mx:Panel> 
</mx:Application> 

edilir: Burada

JSONParseError: Unexpected < encountered 
    at com.adobe.serialization.json::JSONTokenizer/parseError() 
    at com.adobe.serialization.json::JSONTokenizer/getNextToken() 
    at com.adobe.serialization.json::JSONDecoder/nextToken() 
    at com.adobe.serialization.json::JSONDecoder() 
    at com.adobe.serialization.json::JSON$/decode() 
    at DressBuilder2/getPHPData() 
    at DressBuilder2/__getData_result() 
    at flash.events::EventDispatcher/dispatchEventFunction() 
    at flash.events::EventDispatcher/dispatchEvent() 
    at mx.rpc.http.mxml::HTTPService/http://www.adobe.com/2006/flex/mx/internal::dispatchRpcEvent() 
    at mx.rpc::AbstractInvoker/http://www.adobe.com/2006/flex/mx/internal::resultHandler() 
    at mx.rpc::Responder/result() 
    at mx.rpc::AsyncRequest/acknowledge() 
    at DirectHTTPMessageResponder/completeHandler() 
    at flash.events::EventDispatcher/dispatchEventFunction() 
    at flash.events::EventDispatcher/dispatchEvent() 
    at flash.net::URLLoader/onComplete() 

gerçek mxml kodudur: Bu benim alıyorum hatadır Eğer beklenmedik bir < var gibi

<?php 
    $USERNAME = ''; //database username 
    $PASSWORD = ''; //database password 
    $DATABASE = ''; //database name 
    $URL = '';  //database location 

    if(isset($_GET['getTutorials'])) { 
    mysql_connect($URL, $USERNAME, $PASSWORD); 
    mysql_select_db($DATABASE) or die('Cannot connect to database.'); 

    $returnArray = array(); 

    $query = 'SELECT * FROM Tutorials'; 
    $result = mysql_query($query); 

    while($row = mysql_fetch_assoc($result)) { 
     array_push($returnArray, $row); 
    } 

    mysql_close(); 
    echo json_encode($returnArray); 
    } 
    elseif(isset($_GET['setTutorials'])) { 
    $jsonString = urldecode($_GET['jsonSendData']); 
    $jsonString = str_replace("\\", "", $jsonString); 
    $data = json_decode($jsonString, true); 

    mysql_connect($URL, $USERNAME, $PASSWORD); 
    mysql_select_db($DATABASE) or die('Cannot connect to database.'); 

    foreach ($data as $tutorialEntry) { 
     $query = sprintf(
     'UPDATE Tutorials SET rating = "%s" WHERE id = "%s"', 
     mysql_real_escape_string($tutorialEntry['rating']), 
     mysql_real_escape_string($tutorialEntry['id'])); 

     $result = mysql_query($query); 

     if(!$result) { 
     mysql_close(); 
     echo mysql_error(); 
     return; 
     } 
    } 

    mysql_close(); 
    echo "database updated"; 
    } 
?> 

cevap

2

(kod ne aradığını hangisi) döndürür http://www.keishalexie.com/imd465/forum.php?getTutorials=1 ziyaret

Önemli hata: tanımsız işlevine çağrı: json_encode() /homepages/38/d177816689/htdocs/keishalexie/imd465/forum.php içinde on line 23

Bu bir json belgesi değil.

Sorunu gidermek için tarayıcınızda http://www.keishalexie.com/imd465/forum.php?getTutorials=1'u ziyaret edin. Sonra bir kez iyi göründüğünde, FLEX tarafında çalışmaya başlayın.

+0

Çok teşekkürler - ipuçlarınız için. PHP'nin önceki bir sürümünde çalıştığım için php-json uzantısına ihtiyacım çıktı. Sonunda PHP'yi çalıştırmayı başardım ve şimdi FLEX'te çalışıyorum. – LaBopeep

1

görünüyor senin JSON verileri, güzel temiz JSON yerine sunucudan geri html aldığınız gibi geliyor.

firebug veya sunucunun yanıtını incelemek için bir http üstbilgisi aracını kullanın (veya URL'yi bir tarayıcıda yükleyin) ve yanıtın ne olduğunu görün.

JSON verilerinizi verirken hata günlüğünü devre dışı bırakmanız gerekebilir veya bir şablon sistemi kullanıyorsanız JSON'u gönderirken kullanamazsınız.

+0

As3corelib 92.1 kullanıyorum, bu yüzden kodda ek bir LaBopeep

+0

Firebug kullanın, burada firebug hakkında hızlı bir kılavuz. http://www.ibm.com/developerworks/web/library/wa-aj-firebug/index.html#N10242 – garrow

0

Web sunucunuzun bir HTML hata sayfası oluşturduğu anlaşılıyor. Yani, evet .. Ayrıştırmadan önce ayrıştırmak veya bir kesme noktası koymaya çalıştığınız JSON'u günlüğe ayırın ve ayrıştırmaya çalıştığınız içeriğin ne olduğunu görün.