AFNetworking error :The operation couldn’t be completed. (Cocoa error 3840.)

50,242

Cocoa error 3840 is a JSON parsing error (if you search on Stack Overflow for it you'll come across this existing question about).

I suggest you run your output JSON from your web service through a JSON validator to check that it is actually compliant with the spec.

Share:
50,242
jona jürgen
Author by

jona jürgen

Updated on March 04, 2020

Comments

  • jona jürgen
    jona jürgen over 4 years

    I send a post request to my server like this.:

    -(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;
    
    }
    

    But I always get this error: error:The operation couldn’t be completed. (Cocoa error 3840.) The index.php code looks like this:

    <?
     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;
     }
     ?>
    

    Here I execute the command.:

    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
       }
    ?>
    

    And here is the code for the query function.:

    <?
    
         //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);
     }
    }
    

    I dont know whats wrong, because when I just select all products it works fine. The error just come when I use WHERE.

    Thanks for your help.

  • jona jürgen
    jona jürgen almost 11 years
    Hey, you are right there are several post referring to the same error. But none seem to solve my error. When I check the array, I just get this error back, no other objects... Is there any way to catch the responds from the server(running xampp on mac, so it´s local) to check the JSON output? And as I said it works fine when I use SELECT * FROM Produkte
  • jona jürgen
    jona jürgen almost 11 years
    Me again, I dont know what I changed.. I just restarted the server and suddenly everything works as it should.... sry for waisting your time :(