2012-10-08 38 views
0

我正在研究以JSON形式返回數據的PHP Web服務。我現在正在使用jQuery/javascript文件測試Web服務。它似乎在正確地調用和接收數據,但服務器的返回值似乎有太多的雙引號。json_encode添加太多雙引號

PHP:

public static function getToken($username, $password) 
     { 
      $token = AuthenticationController::authenticate($username, $password); 

      if ($token) 
      { 
       $user = AuthenticationController::getUserFromToken($token); 

       if (UserController::userIsVerified($user->id)) 
       { 
        $t = array('token' => $token); 

        return json_encode($t); 
       } 

       return json_encode(array('error' => 'This account has not been verified. Check email and click the provided link to verify the account.')); 
      } 

      return json_encode(array('error' => 'Authentication failed.')); 
     } 

JS:

req.done(function(msg) 
     { 
      if (msg.error) 
      { 
       error = true; 
       message = msg.error; 
      } 
      else if (msg.message) 
      { 
       message = msg.message; 
      } 
      else if (msg.token) 
      { 
       token = msg.token; 
      } 
      else 
      { 
       error = true; 
       message = "An unknown error has occured."; 
      } 
     }); 

其一,msg對象不回來了作爲一個JSON對象,而是它有一個字符串,所以我必須做的一個$.parseJSON(msg)就可以了。你在下面看到的令牌變量最後寫出來是「mylongtoken」(包括引號)。如果你在螢火蟲中查看這個變量,就像這樣:「」mylongtoken「」。這只是默認行爲,我需要去掉引號?

+0

將你的json結果粘貼在這裏 – GBD

+0

你是否告訴ajax函數期望從服務器返回一個dataType:'json'?如果沒有,你必須每次解析obj。如果你有太多的「雙引號」,是否是你拉入對象的數據的問題?我們可以看到返回的'string'嗎? – Ohgodwhy

+0

這是返回的原始字符串。 「{」token「:」mylongtoken「}」...你如何告訴$ .post你期待json? –

回答

1

首先,爲了讓jquery能夠將你的響應解析爲json,你必須返回一個合適的內容類型。 application/json看起來合適。

爲了增加安全性,你可以添加X-Content-Type-Options: nosniff防止被騙讀你的JSON作爲一個正常的網頁,嘗試任何內容嗅探可能使HTML解析和XSS瀏覽器:

其次,如果你得到兩套的引號,那麼你編碼的東西確實會添加它們。 json_encode()不:

echo json_encode(array('token' => 'tokenstring');將輸出{"token":"tokenstring"} - 沒有周邊引號。任何字符串內的任何引號都將使用反斜線進行轉義。

+0

謝謝。我發現我在某個類的某個地方進行了兩次json_encode。 –