2012-04-16 43 views
0

我很確定對我的問題有一個非常簡單的修復方法,但我會盡可能詳細地解釋。AS3&MySQL - 將輸出的字符串添加到變量

基本上我使用PHP與MySQL使用GETs將信息發送到我的Flash文件。

使用FlashVars我已經設法得到用戶的id',我可以將我的問題/搜索發送到訪問數據庫並將信息返回到html頁面的PHP腳本。

我想什麼,現在做的就是添加發送回html頁面的變量中閃光的信息。例如:

var usr_name = get_user_name(id) || 'Unknown'; // "Unknown" should just be for offline use. 

但這只是返回「未知」

這是使用的功能:

 public function get_user_name(usr_id){ 
       loadData('search.php',"quest=name",'usr_id='+usr_id); 
     } 

private function loadData(page_Name='search.php',get1='g1=1',get2='g2=2',get3='g3=3'):void { 
      var randomParam:String = "?p=" + Math.floor(Math.random() * (10000000)); 
      var create_URL = (URL + page_Name + randomParam + '&'+ get1 + '&' + get2 + '&' + get3) ; 
      trace(create_URL); 

      _loader = new URLLoader(); 
      _request = new URLRequest(create_URL);   
      _request.method = URLRequestMethod.POST; 
      _loader.addEventListener(Event.COMPLETE, onLoadData); 
      _loader.addEventListener(IOErrorEvent.IO_ERROR, onDataFiledToLoad); 
      _loader.addEventListener(IOErrorEvent.NETWORK_ERROR, onDataFiledToLoad); 
      _loader.addEventListener(IOErrorEvent.VERIFY_ERROR, onDataFiledToLoad); 
      _loader.addEventListener(IOErrorEvent.DISK_ERROR, onDataFiledToLoad); 
      _loader.load(_request); 
     } 

public function onLoadData(e:Event):String { 
      return(e.target.data); 
     } 

這一切似乎都工作正常,它只是當我嘗試做出來的或聲明(||「未知」)我得到這個錯誤:

TypeError: Error #2007: Parameter text must be non-null. 
    at flash.text::TextField/set text() 
    at App/frame1() 

如果我只是在網頁瀏覽器中輸入網址,我會得到名字。

我不知道爲什麼這是一個這樣的問題。

感謝 禮

回答

0
public function onLoadData(e:Event):String { 

      return(e.target.data); 
     } 

如果你希望上面的函數來響應字符串返回到變量,那麼你就錯了。您必須讓onLoadData填充變量本身。試試這個方法:

var usr_name = 'Unknown'; 

get_user_name(id); 


function get_user_name(usr_id) { 

    loadData('search.php',"quest=name",'usr_id='+usr_id); 
} 

function loadData(page_Name='search.php',get1='g1=1',get2='g2=2',get3='g3=3'):void { 

    var randomParam:String = "?p=" + Math.floor(Math.random() * (10000000)); 
    var create_URL = (URL + page_Name + randomParam + '&'+ get1 + '&' + get2 + '&' + get3); 
    trace(create_URL); 

    _loader = new URLLoader(); 
    _request = new URLRequest(create_URL); 
    _request.method = URLRequestMethod.POST; 
    _loader.addEventListener(Event.COMPLETE, onLoadData); 
    _loader.addEventListener(IOErrorEvent.IO_ERROR, onDataFiledToLoad); 
    _loader.addEventListener(IOErrorEvent.NETWORK_ERROR, onDataFiledToLoad); 
    _loader.addEventListener(IOErrorEvent.VERIFY_ERROR, onDataFiledToLoad); 
    _loader.addEventListener(IOErrorEvent.DISK_ERROR, onDataFiledToLoad); 
    _loader.load(_request); 
} 

function onLoadData(e:Event) { 

    usr_name = e.target.data; 
} 
+0

因此,這樣的工作,但由於加載和輸出之間有一個延遲抓住未知然後一旦加載改變它的名稱,但它已經到了晚期.. – 2012-04-16 17:47:31

+0

明顯會發生。您正在通過網絡發出請求。它不必太晚。只要確保沒有其他事情開始,直到返回響應。 – loxxy 2012-04-16 18:37:55

0

確定,從你的代碼粗略地看一眼,很明顯你不知道在AS3 URL請求的「異步」的性質。

當你做_loader.load(),Flash實際上打開這個管道在不同線程,可以這麼說。這可確保在加載URL請求時應用程序不會凍結。

所有你需要這樣是這樣的:

public function get_user_name(usr_id){ 
    loadData('search.php',"quest=name",'usr_id='+usr_id); 
} 

private function loadData(page_Name='search.php',get1='g1=1',get2='g2=2',get3='g3=3'):void { 
    var randomParam:String = "?p=" + Math.floor(Math.random() * (10000000)); 
    var create_URL = (URL + page_Name + randomParam + '&'+ get1 + '&' + get2 + '&' + get3) ; 
    trace(create_URL); 

    _loader = new URLLoader(); 
    _request = new URLRequest(create_URL);   
    _request.method = URLRequestMethod.POST; 
    _loader.addEventListener(Event.COMPLETE, onLoadData); 
    _loader.addEventListener(IOErrorEvent.IO_ERROR, onDataFiledToLoad); 
    _loader.addEventListener(IOErrorEvent.NETWORK_ERROR, onDataFiledToLoad); 
    _loader.addEventListener(IOErrorEvent.VERIFY_ERROR, onDataFiledToLoad); 
    _loader.addEventListener(IOErrorEvent.DISK_ERROR, onDataFiledToLoad); 
    _loader.load(_request); 
} 

public function onLoadData(e:Event):String { 
    usr_name = e.target.data || 'Unknown'; 
} 

你這樣稱呼它

var usr_name = ""; 
get_user_name(); 

我注意到你的代碼是不是強類型。即您不要將數據類型分配給您的變量。這可能會導致問題並降低可讀性。

此外,您最好刪除所有添加的事件偵聽器(使用removeEventListener),以便加載器被垃圾收集。

+0

複製答案不是我們應該遵循的東西......只是我的想法。 – loxxy 2012-04-16 18:40:24

+0

啊,但我沒有重複你的答案。代碼將__OBVIOUSLY__是一樣的,但你剛剛舀過OP,並且我已經解釋了它爲什麼按照它的方式工作。總而言之,這不是所謂的重複,所以你的論點是無效的......只是我的想法。 – 2012-04-17 07:25:28