2013-08-06 21 views
15

wysłać żądanie POST do serwera tak .:AFNetworking error: Operacja nie mogła zostać zakończona. (Błąd Cocoa 3840.)

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

} 

Ale zawsze uzyskać ten błąd: błąd: Operacja nie może być zakończona. (Błąd Cocoa 3840.) Kod index.php wygląda następująco:

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

Tu wykonać polecenie .:

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

A oto kod dla funkcji zapytań .:

<? 

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

Nie wiem, co jest nie tak, ponieważ po wybraniu wszystkich produktów wszystko działa poprawnie. Błąd pojawia się, gdy używam GDZIE.

Dzięki za pomoc.

Odpowiedz

19

Błąd kakao 3840 jest błędem parsowania JSON (w przypadku przeszukiwania w przepełnieniu stosu natkniesz się na this existing question about).

Proponuję uruchomić wyjście JSON z usługi sieciowej za pomocą walidatora JSON, aby sprawdzić, czy jest on rzeczywiście zgodny ze specyfikacją.

+1

Hej, masz rację, jest kilka postów odnoszących się do tego samego błędu. Ale żaden nie rozwiązuje mojego błędu. Kiedy sprawdzam tablicę, otrzymuję ten błąd z powrotem, żadnych innych obiektów ... Czy istnieje sposób na złapanie odpowiedzi z serwera (z uruchomieniem xampp na mac, więc jest to lokalne), aby sprawdzić wyjście JSON? I jak już powiedziałem, działa dobrze, gdy użyję SELECT * FROM Produkte –

+0

Me znowu, nie wiem co zmieniłem .. Po prostu zrestartowałem serwer i nagle wszystko działa tak, jak powinno .... zasmakuj, żeby nie tracić czasu :( –

Powiązane problemy