2013-06-03 3 views
1

Je reçois un message d'erreur expliquant l'erreur suivante.JSON encoder les paramètres problème

json_encode() expects at most 2 parameters, 3 given</p> 

Quand je fais l'appel à la fonction json_encode je les trois paramters réglage, les valeurs accpted. J'essaye de comprendre pourquoi c'est parce que quand j'effectue des tests sur mon code, j'obtiens toutes les valeurs acceptées avec cette fonction.Quelles sont les pensées? Je pense que c'est quelque chose à voir avec l'instruction switch mais j'ai besoin de plus . verifcation ainsi que des informations sur ce que je fais mal que quelqu'un peut me éclairer s'il vous plaît

public function output($message, $title, $status) 
{ 
    switch ($status) 
    { 
     case 'Error': 
      array('status' => 'Error'); 
      break; 
     case 'Notice': 
      array('status' => 'Notice'); 
      break; 
     case 'Success': 
      array('status' => 'Success'); 
      break; 
    } 
    echo json_encode($status, $title, $message); 
} 
+2

Vous donnez les mauvais paramètres. voir [json_encode] (http://php.net/manual/en/function.json-encode.php) –

+0

Je vous suggère d'utiliser la fonction 'strtoupper' dans le commutateur et votre tableau dans le commutateur ne va nulle part. –

Répondre

3

Voici ce que je propose et travaillerais:

public function output($Message='', $Title='', $Status=''){ 
    # We make sure our status is perfect. 
    # We make sure our status will always be what we want and not something different by mistake. 
    # We default to "Error". 
    switch(strtoupper($Status)){ 
     default: 
      $Status = 'error'; 
     break; 

     case 'NOTICE': 
      $Status = 'notice'; 
     break; 

     case 'SUCCESS': 
      $Status = 'success'; 
     break; 
    } 

    # We output the content as JSON 
    header('Content-Type: application/json'); 
    echo json_encode(array(
     'status' => $Status, 
     'title'  => $Title, 
     'message' => $Message 
    )); 

    # Done - 0 mean the page end with no error (PHP error !) 
    exit(0); 
} 

Sortie:

output('this is my message', 'this is my title', 'error');

{ 
    "status" : "error", 
    "title" : "this is my title", 
    "message" : "this is my message" 
} 

: Documentations

+0

J'aime bien celui-ci mais quel est le but de l'interrupteur ci-dessus avec la fonction strtoupper et le fait de la fonction d'en-tête pourquoi est-il important d'avoir ceux-ci. –

+0

@KevinSmith La fonction 'strtoupper' s'assurera que si vous écrivez" eRroR ", cela fonctionnera et deviendra" ERROR ". Le commutateur recherchera "ERROR" et non "eRroR" et fonctionnera à la fin même si vous faites une erreur. L'en-tête est important. Il indique au navigateur/client quel type de contenu arrive. Certains clients n'accepteront pas la réponse de votre serveur si le type de contenu n'est pas défini correctement. –

+1

Fait défaut: cas 'ERROR': une syntaxe acceptable pour l'instruction switch –

5

Vous pouvez chercher quelque chose comme ceci:

echo json_encode(array($status, $title, $message)); 

ou, comme d'autres ont suggéré, comme ceci:

json_encode(array("status"=>$status, "title"=>$title, "message"=>$message)) 
3

Vous pouvez uniquement coder une structure de données unique. Si vous souhaitez coder trois bits de données, vous devez d'abord les combiner dans une structure de données unique. Par exemple:

echo json_encode(Array("status" => $status, "title" => $title, "message" => $message)); 
3

Je pense que ce que vous essayez de faire est de coder un tableau?

public function output($message, $title, $status) 
{ 
    switch ($status) 
    { 
     case 'Error': 
      array('status' => 'Error'); 
      break; 
     case 'Notice': 
      array('status' => 'Notice'); 
      break; 
     case 'Success': 
      array('status' => 'Success'); 
      break; 
    } 
    echo json_encode(array($status, $title, $message)); 
} 
output('messageval', 'titleval', 'statusval'); 

qui va JSON comme:

["statusval", "titleval", "messageval"] 

ou il y a aussi ceci:

public function output($message, $title, $status) 
{ 
    switch ($status) 
    { 
     case 'Error': 
      array('status' => 'Error'); 
      break; 
     case 'Notice': 
      array('status' => 'Notice'); 
      break; 
     case 'Success': 
      array('status' => 'Success'); 
      break; 
    } 
    echo json_encode(array('status'=>$status, 'title'=>$title, 'message'=>$message)); 
} 
output('messageval', 'titleval', 'statusval'); 

qui sera quelque chose de similaire à:

{"message":"messageval", "title":"titleval", "status":"statusval"} 

En outre, votre bloc de commutation ne fera rien de péché ce que vous n'utilisez pas le tableau produit par array().

+1

Ce qui signifie que je pourrais complètement l'enlever. –

2

Lire, http://php.net/manual/en/function.json-encode.phphttp://php.net/manual/en/control-structures.switch.php que faites-vous avec le commutateur? ce que cela veut dire?'Error': case ('status' => 'Erreur');

Je pense que vous voulez quelque chose comme suit,

public function output($message, $title, $status) 
{ 
    switch ($status) 
    { 
     case 'Error': 
      array('status' => 'Error'); 
      break; 
     case 'Notice': 
      array('status' => 'Notice'); 
      break; 
     case 'Success': 
      $output = $title . $message; 
      echo json_encode($output); 
      break; 
    } 

} 
+0

Cela ne fonctionnera pas. Dans le cas où '$ status' n'est pas' Success', il échouera. Il ne sortira le contenu que si '$ status' est égal à' Success'. Si le programmeur tape par erreur 'eRror', rien n'est par défaut et corrigé. –

+0

Dans ce cas peut-être que vous ne voulez pas json_encode, vous voulez juste 'echo" Erreur se produire ";' donc, je viens de poster pour l'aider, il doit faire le codage exact. –

+0

Même avec 'echo" Erreur se produit ";', vous brisez la chose. Raison: si vous lisez la sortie, vous devez lire soit json et/ou votre message de cusetom. –

2
public function output($message, $title, $status) 
    { 
     switch ($status) 
     { 
      case 'Error': 
       array('status' => 'Error'); 
       break; 
      case 'Notice': 
       array('status' => 'Notice'); 
       break; 
      case 'Success': 
       array('status' => 'Success'); 
       break; 
     } 
     echo json_encode(array('status' => $status, 'title' => $title, 
    'message' =>$message)); 

    } 

Pour plus d'abou t json_encode référez-vous à ceci json_encode