Вопрос по ios, objective-c, ipad, iphone – Отправьте json на php с помощью ASIFormDataRequest

0

Я новичок в iPhone и пытаюсь преобразовать массив NSMutable в строку json, затем отправить эту строку в php-файл с помощью запроса, а затем снова распечатать его, используя ответ NSLog, чтобы убедиться, что он был успешно отправлен. Поэтому я написал следующий код в viewDidLoad

NSString *phpUrl = @"http://dt-works.com/eman/bookMarks.php";

NSMutableArray *arrayKey = [[NSMutableArray alloc] initWithObjects:@"one", @"two", @"three", nil];
NSMutableArray *arrayValue1 = [[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3", nil]; 
NSMutableArray *arrayValue2 = [[NSMutableArray alloc] initWithObjects:@"11", @"22", @"33", nil]; 

NSDictionary *theReqDictionary1 = [NSDictionary dictionaryWithObjects:arrayValue1 forKeys:arrayKey];
NSDictionary *theReqDictionary2 = [NSDictionary dictionaryWithObjects:arrayValue2 forKeys:arrayKey];

NSMutableArray *myArray = [NSMutableArray arrayWithObjects:theReqDictionary1,theReqDictionary2, nil];

NSString *jsonString = [myArray JSONRepresentation];

NSLog(@"%@", jsonString);



 NSDictionary *questions = nil;
NSURL *link = [NSURL URLWithString:[phpUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:link];
[request setPostValue:jsonString forKey:@"jsonString"];
[request setTimeOutSeconds:120];
[request setDelegate:self];
NSError *error = [request2 error];
[request2 startSynchronous];

if (!error) { 
    NSData *response = [request responseData];
    NSString *json = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
    questions = [json objectFromJSONString];
    NSLog(@"Data: %@", questions);

} 

и код в bookMarks.php:

$handle = fopen('php://input','r');
$jsonInput = $_POST['jsonString'];
print_r($jsonInput);

но это дает мне:

[{"one":"1","two":"2","three":"3"},{"one":"11","two":"22","three":"33"}]
Data: (null)

и я хочу, чтобы данные были такими: [{"one": "1", "two": "2", "three": "3"}, {"one": "11", "two": " 22 "," три ":" 33 "}] как это сделать ??

yes Мне просто нужно отправить NSMUtableArray в php как json, а не переменные, я пробовал переменные раньше, и это работает, на этот раз я хочу отправить массив как json, Emy Alsabbagh
Ты уверен, что тебе нужно отправить json? Если вы дойдете до формы php, вы можете просто отправить все свои переменные как POST или GET, это будет проще! Nicolas Manzini

Ваш Ответ

1   ответ
0

вместо того, чтобы публиковать строку JSON с ключом, вам нужно опубликовать ее как данные в вашем скрипте для чтения. В настоящее время в вашем скрипте вы даже не используете $ handle для чего-либо ...

NSURL *link = [NSURL URLWithString:[phpUrl     stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:link];
[request appendPostData:[jsonString  dataUsingEncoding:NSUTF8StringEncoding]]; 
[request setTimeOutSeconds:120];
[request setDelegate:self];

И твой php код ..

$handle = fopen('php://input','r');
$jsonInput = fgets($handle);
$decoded = json_decode($jsonInput,true);
print_r($decoded);
спасибо за ваш ответ, теперь он печатает массив, и я хочу задать еще один вопрос, в общем, есть ли ошибка в $ jsonInput = $ _POST ['jsonString']; ?? Я имею в виду: могу ли я использовать его позже в php и декодировать или в нем что-то не так ?? Emy Alsabbagh
как я могу получить jsonString в php для его декодирования ?? Emy Alsabbagh
Я отредактировал свой ответ и включил декодирование jsonInput в массив PHP, который вы можете отправить обратно в свое приложение, где вы можете использовать комбинацию NSArray и или NSDictionary для анализа и использования данных. skram

Похожие вопросы