2012-06-04 79 views
1

我的PHP類中有以下方法處理消息並將其發送回JQuery。如果只有一條消息要發送回來,但是如果有多條消息,它會將它們作爲單獨的json對象發回。消息被髮送回來,但JQuery給了我一個錯誤。這些消息是這樣的:JSON的json_encode錯誤消息

{"error":true,"msg":"Message 1 here..."}{"error":true,"msg":"Message 2 here"} 

我的PHP方法是這樣的:

private function responseMessage($bool, $msg) { 
    $return['error'] = $bool; 
    $return['msg'] = $msg; 
    if (isset($_POST['plAjax']) && $_POST['plAjax'] == true) { 
     echo json_encode($return); 
    } 
    ... 
} 

我不知道如何改變這種做法,多條錯誤消息放到一個JSON編碼的消息,還如果它只是一個單一的信息就工作。

你能幫忙嗎? 謝謝

回答

2

看起來你需要將追加到一個數組,然後當所有的消息都被添加,輸出的JSON。目前,您的函數輸出JSON它被稱爲的任何時間:

// Array property to hold all messages 
private $messages = array(); 

// Call $this->addMessage() to add a new messages 
private function addMessage($bool, $msg) { 
    // Append a new message onto the array 
    $this->messages[] = array(
    'error' => $bool, 
    'msg' => $msg 
    ); 
} 
// Finally, output the responseMessage() to dump out the complete JSON. 
private function responseMessage() { 
    if (isset($_POST['plAjax']) && $_POST['plAjax'] == true) { 
     echo json_encode($this->messages); 
    } 
    ... 
} 

輸出JSON將是類似對象的數組:

[{"error":true,"msg":"Message 1 here..."},{"error":true,"msg":"Message 2 here"}] 
+0

謝謝!我可以試試看看。 – user1002039

+0

即使只有一條消息,總是得到json對象周圍的方括號是否正常? – user1002039

+0

@ user1002039由於您創建了一個數組,因此。在接收此JSON的JavaScript代碼中,如果只有一個,則需要訪問第一個數組元素。 –

0

您可以將錯誤作爲數組發送。

$errors = Array(); 
// some code 
$errors[] = ...; // create an error instead of directly outputting it 
// more code 
echo json_encode($errors); 

這將導致類似:

[{"error":true,"msg":"Message 1 here..."},{"error":true,"msg":"Message 2 here"}] 
0

聽起來像一個設計問題。您需要構建一個對象,如$ response = array();然後每次需要添加錯誤時只需追加它。 $ response [] = $ errorData;那麼當你完成只是json_encode($響應);