簡體   English   中英

我已經嘗試了每個方法來返回JSON編碼的PHP對象 - 為什么它不起作用?

[英]I have tried every method to return JSON encoded PHP objects - why won't it work?

解:

基本上,沒有一個。 $ _Sock是一個資源,因此不能通過json_encode()傳遞。 不幸的是,連接是通過$ .post建立的,這意味着它不能跨多個頁面保存(除非像Jon建議的那樣使用應用程序服務器。)

每次建立連接都沒有特別的不便; 它只是一種可以容忍的煩惱。 我將不得不依賴於每次重新建立連接的模型,以便通過RCON服務器發送命令。

感謝Ryan和Jon的巨大幫助!


原帖:


我嘗試過dataType: 'json'$.parseJSON()Header("Content-type: application/json") ,但是當我嘗試返回一個json_encode()數組或對象時,我遇到了這個錯誤:

    Warning: json_encode(): type is unsupported, encoded as null

這是JavaScript $ .post:

    $.post("rcon.php",
    {
        ip:server.ip,
        port:server.rcon.port,
        pwd:server.rcon.pwd
    },
    function(data){
        alert(data);
        $("#output").val($("#output").val()+data+"\n");
    });

...這里是返回數據的PHP:

    $r = new minecraftRcon($rconServer, $rconPort, $rconPass);
    if ($r->Auth()) { $response = "Authenticated."; } else { $response = "Authentication failed."; }
    echo json_encode($r);

我已經在這3個小時了。 我根本不明白我需要做些什么才能讓它發揮作用。 我嘗試過gettype ,它確認數據確實是一個對象。 json_encode應該接受它,但它“不受支持”。 請幫助 - 我失去了理智。


后續代碼var_dump($ R):

    <pre class='xdebug-var-dump' dir='ltr'>
    <b>object</b>(<i>minecraftRcon</i>)[<i>1</i>]
      <i>public</i> 'Password' <font color='#888a85'>=&gt;</font> <small>string</small><font color='#cc0000'>'derp'</font> <i>(length=4)</i>
      <i>public</i> 'Host' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'localhost'</font> <i>(length=9)</i>
      <i>public</i> 'Port' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'25575'</font> <i>(length=5)</i>
      <i>public</i> '_Sock' <font color='#888a85'>=&gt;</font> <b>resource</b>(<i>4</i><font color='#2e3436'>,</font> <i>stream</i>)
      <i>public</i> '_Id' <font color='#888a85'>=&gt;</font> <small>int</small> <font color='#4e9a06'>1</font>
    </pre>

這基本上就是我要做的事情:

  1. 通過向PHP發送$ .post請求來創建與Minecraft服務器的RCON連接,這將建立連接。
  2. 返回響應(“Authenticated”或“Authentication failed”)以指示成功和創建的對象供以后使用(以避免創建多個連接。)
  3. 通過這個已經創建的RCON對象發送命令,方法是將它返回到JS $ .post並將其存儲在頁面上的變量中。

以上所有操作都將通過一個.php頁面完成,輸出會被警告並打印到textarea(有時根本不起作用)。

正如文檔所述,您無法使用json_encode對資源類型進行編碼。 當前代碼嘗試這樣做是因為類minecraftRcon公開屬性$_Sock其值是資源。

但是,目前還不清楚為什么你的JS / PHP代碼不能整體運行。 由於您無法從PHP訪問(或甚至查看)任何“內部”資源值,因此幾乎可以肯定您並未嘗試從JS執行此操作,因此雖然警告有效並且您應該修復它,但它可能不會對你目前的問題充滿信心。

您不能直接在json_encode()編碼對象。

您需要將對象轉換為數組,您可以使用以下內容:

$data = get_object_vars($r)

並編碼$data

暫無
暫無

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

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