【问题标题】:JSON Parse Error using FLEX and PHP使用 FLEX 和 PHP 的 JSON 解析错误
【发布时间】:2010-10-10 11:25:29
【问题描述】:

我正在使用 JSON 来解析数据并连接到 PHP 文件。我不确定问题出在哪里,因为我是 flex 新手。这是我收到的错误:

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()

这是实际的mxml代码:

<?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>

这里是 PHP:

<?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";
   }
?>

【问题讨论】:

    标签: php apache-flex json


    【解决方案1】:

    您的 JSON 数据中似乎有一个意外的

    使用firebug 或http 标头工具来检查来自服务器的响应(或者只是在浏览器中加载url)并查看响应是什么。

    您可能需要在输出 JSON 数据时禁用错误日志记录,或者如果您使用的是模板系统,则在发送 JSON 时不要使用它。

    【讨论】:

    【解决方案2】:

    看起来您的网络服务器正在抛出一个 HTML 错误页面。所以,是的.. 记录您尝试解析的 JSON 或在解析之前放置断点,然后查看您尝试解析的内容是什么。

    【讨论】:

      【解决方案3】:

      访问http://www.keishalexie.com/imd465/forum.php?getTutorials=1(这是您的代码所调用的)返回

      致命错误:调用未定义函数:第 23 行 /homepages/38/d177816689/htdocs/keishalexie/imd465/forum.php 中的 json_encode()

      这不是一个 json 文件。

      解决问题时,请在浏览器中访问http://www.keishalexie.com/imd465/forum.php?getTutorials=1。然后,一旦那里看起来不错,就开始处理 FLEX 方面的工作。

      【讨论】:

      • 非常感谢您的提示。原来我需要 php-json 扩展,因为我使用的是早期版本的 PHP。我终于能够让 PHP 正常工作,现在我正在开发 FLEX。
      猜你喜欢
      • 2010-11-16
      • 2014-07-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多