web-dev-qa-db-fra.com

AFNetworking error: L'opération n'a pas pu être terminée. (Erreur cacao 3840.)

J'envoie une demande de publication à mon serveur comme ceci:

-(Produkt*)fetchProductByID:(int)idNumber
{

NSString* command = @"fetchProduct";
NSString* number = [NSString stringWithFormat:@"%d",idNumber];
NSMutableDictionary* params =[NSMutableDictionary dictionaryWithObjectsAndKeys:
                              command, @"command",
                              number, @"id",
                              nil];

[self commandWithParams:params onCompletion:^(NSDictionary *json)
 {
     //result returned
     NSDictionary* res = [[json objectForKey:@"result"] objectAtIndex:0];
     NSMutableArray* dics = [[NSMutableArray alloc]init];

     if ([json objectForKey:@"error"]==NULL && [res count]>0)
     {
         //success
         for(int i=0;i<[[json objectForKey:@"result"]count];i++)
         {
             res = [[json objectForKey:@"result"] objectAtIndex:i];
             [dics addObject:res];

             NSLog(@"SPECIAL FETCHED PRODUKT:%@",res);
         }
     }
     else
     {
         //error
         NSLog(@"error:%@",[json objectForKey:@"error"]);
         res = [[json objectForKey:@"result"] objectAtIndex:0];
         NSLog(@"SPECIAL FETCHED PRODUKT:%@",res);
     }

 }];

return NULL;

}

Mais j'obtiens toujours cette erreur: erreur: l'opération n'a pas pu être terminée. (Erreur Cocoa 3840.) Le code index.php ressemble à ceci:

<?
 require("lib.php");
require("QMServerAPI.php");

header("Content-Type: application/json");

switch ($_POST['command']) 
{
  case "fetchAllProduct": //Different question
  fetchAllProduct(); 
  break;

  case "fetchProduct":
  fetchProduct($_POST['id']);
  break;

  case "insertProduct":
  insertProduct($_POST['name'], $_POST['artikelNr'],
   $_POST['anleitung'], $_POST['image'], $_POST['editDate'],
   $_POST['id']); 
  break;

  case "updateProduct":
  updateProduc($_POST['name'], $_POST['artikelNr'],
  $_POST['anleitung'], $_POST['image'], $_POST['editDate'],
  $_POST['id']);
  break;
 }
 ?>

Ici, j'exécute la commande .:

function errorJson($msg)
{
  header('Content-type: application/json');
  print json_encode(array("error"=>$msg));
  exit();
}

function fetchAllProduct()
{
     //fetch all Products
     $result = query("SELECT * FROM Produkte");
     print json_encode($result);
}

function fetchProduct($id)
{
      //fetch specific product 
      $result  = query("SELECT * FROM Produkte WHERE id = '122'");
      print jeson_encode($result);
 }
  function insertProduct($name, $artikelNr, $anleitung, $image, 
              $editDate, $id)
 {

  }

    function updateProduct($name, $artikelNr, $anleitung, $image, 
              $editDate, $id)
   {
   //update old product
   }
?>

Et voici le code de la fonction de requête:

<?

     //setup db connection
   $link = mysqli_connect("localhost","root","");
   mysqli_select_db($link, "QM");

   //executes a given sql query with the params and returns an array as result
    function query() {
   global $link;
  $debug = false;

   //get the sql query
  $args = func_get_args();
  $sql = array_shift($args);

     //secure the input
    for ($i=0;$i<count($args);$i++) {
      $args[$i] = urldecode($args[$i]);
     $args[$i] = mysqli_real_escape_string($link, $args[$i]);
   }

   //build the final query
  $sql = vsprintf($sql, $args);

  if ($debug) print $sql;

   //execute and fetch the results
      $result = mysqli_query($link, $sql);
     if (mysqli_errno($link)==0 && $result) {

  $rows = array();

  if ($result!==true)
  while ($d = mysqli_fetch_assoc($result)) {
     array_Push($rows,$d);
  }

  //return json
  return array('result'=>$rows);

 } else {

  //error
  return array('error'=> $mysqli->error);
 }
}

Je ne sais pas ce qui ne va pas, car lorsque je sélectionne tous les produits, cela fonctionne bien. L'erreur vient juste quand j'utilise WHERE.

Merci de votre aide.

15
jona jürgen

L'erreur de cacao 3840 est une erreur d'analyse JSON (si vous recherchez sur Stack Overflow pour cela, vous rencontrerez cette question existante sur ).

Je vous suggère d'exécuter votre sortie JSON à partir de votre service Web via un validateur JSON pour vérifier qu'il est réellement conforme aux spécifications.

19
lxt