2016-08-10 2 views
0

Mon code dans iOS:iOS (objectif c) envoyer la demande de poste avec JSON backend php

NSString * some_str = @"{\"one\":\"two\",\"three\":\"four\"}"; 
NSData *objectData = [some_str dataUsingEncoding:NSUTF8StringEncoding]; 
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:objectData 
                options:NSJSONReadingMutableContainers 
                 error:&error]; 
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
manager.requestSerializer = [AFHTTPRequestSerializer serializer]; 
manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
[manager POST:@"https://exmaple.com/post.php" parameters:json progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 
    NSLog(@"JSON: %@", responseObject); 
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 
    NSLog(@"Error: %@", error); 
}]; 

Mon code backend (PHP):

<?php 
if(strcasecmp($_SERVER['REQUEST_METHOD'], 'POST') != 0){ 
    throw new Exception('Request method must be POST!'); 
} 
$contentType = isset($_SERVER["CONTENT_TYPE"]) ? trim($_SERVER["CONTENT_TYPE"]) : ''; 
if(strcasecmp($contentType, 'application/json') != 0){ 
    throw new Exception('Content type must be: application/json'); 
} 

//Receive the RAW post data. 
$content = trim(file_get_contents("php://input")); 
$decoded = json_decode($content, true); 
echo $content; 


// $responses = array(); 
header("Content-type: application/json, charset=utf-8"); 
// echo json_encode($responses); 

$conn->close(); 

?> 

Si j'echo $ contenu, la réponse reçue par iOS sera un nombre hexadécimal. c'est-à-dire 3c21444f 43545950 (le numéro hexadécimal pour la chaîne json commence à partir de la queue jusqu'à la tête connectée par un signe "&", c'est-à-dire trois = quatre & un = deux). Si j'écho $ décodé, il renvoie un json vide.

Et si j'essaye de décoder le json reçu par Post demande, il a échoué. Je croyais que l'objet reçu était une entrée possible pour la fonction json_decode.

Dois-je réécrire mon code iOS ou mon code PHP ou les deux?

+0

vous définissez cette mauvaise ligne: NSString * some_str = @ "{\"un deux trois quatre\"}"; Raison de '\' n'est pas mis après deux s'il vous plaît vérifier vos données. –

+0

@BhadreshKathiriya qui était une faute de frappe. Je vais le corriger. THX. – ManAtMiddleWaterloo

+0

Pourquoi passez-vous par NSString pour construire les paramètres? Vous faites NSString => NSData => NSDictionary, et 'AFHTTPSessionManager' fera NSDictionary => NSData. – Larme

Répondre

0

Essayez ceci ... mai aide

Créer une méthode et passer des paramètres à cette méthode

+ (void)apiRequestForPOSTWithServiceName:(NSString *)serviceName andParameters:(NSDictionary *)parameter withCompletion:(void(^)(id response, BOOL isSuccess))completion 
{ 
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
manager.requestSerializer = [AFJSONRequestSerializer serializer]; 
manager.responseSerializer = [AFJSONResponseSerializer serializer]; 
NSString *url = [NSString stringWithFormat:@"%@%@", BASE_URL, serviceName]; 
[manager POST:url parameters:parameter success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    //NSLog(@"JSON: %@", responseObject); 

    completion(responseObject,YES); 

} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"Error: %@", error); 

    completion(error,NO); 
}]; 
} 

Merci ...

+0

pourriez-vous me dire pourquoi? – ManAtMiddleWaterloo

+0

Pour réutiliser le code ... où que vous vouliez simplement passer la valeur à cette méthode. –

+0

Je pense que ce n'est pas la question était sur. Mais merci. Je garderai cela à l'esprit. – ManAtMiddleWaterloo