1

我正在使用以下代码将数组发送到 php 服务器,但在 php 端它们没有得到任何值。我将数组作为 json 字符串发送。

- (void)postArray {
//Create the URL request
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://test.com./t.php"]];
    NSMutableArray *array = [[NSMutableArray alloc] init];
    [array addObject:@"one"];
    [array addObject:@"Two"];
    [array addObject:@"three"];
    [array addObject:@"four"];
    [request setHTTPMethod:@"POST"];
   // NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:array,@"comment", nil];
    SBJSON *parser =[[SBJSON alloc] init];
   // NSString *jsonString = [parser stringWithObject:dict];
    NSString *jsonString = [parser stringWithObject:array];
    NSLog(@"Str %@",jsonString);
    [request setValue:@"application/x-www-form-urlencoded"
   forHTTPHeaderField:@"Content-Type"];
    [request setValue:jsonString forHTTPHeaderField:@"comment"];
   [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue]  completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {

        NSHTTPURLResponse *HTTPResponse = (NSHTTPURLResponse *)response;
        NSInteger statusCode = [HTTPResponse statusCode];


        if (statusCode==200) {


            //Request goes in success
            NSError* error;
            NSMutableDictionary* json = [NSJSONSerialization
                                         JSONObjectWithData:data //1
                                         options:kNilOptions
                                         error:&error];
            NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];


            NSLog(@"Json for post array ----------%@",str);

        }else{

            ///request is get failed

            NSLog(@"Error Description %@",[error description]);
        }
    }];

    [request release];


}

php的输出是

<pre><br>这是从 Iphone 获得的响应<br>第一个<br><br>第一个<br>第二个接收 json 响应并解码 json 响应<br><br>nullThird 从 commaArray ( [0 ] =>)

这是php代码

<?php

echo "<pre>";
echo "<br>";
//echo "Testing array";
$totalitem=$_POST['total'];
echo "This is response getting from the Iphone";
echo "<br>";
echo "First";
echo $jsonarray1=$_POST['comment'];
echo "<br>";
print_r($jsonarray1);
echo "<br>";
echo "end First";
echo "<br>";



echo "Second receive json response and decode the json response";
echo "<br>";
echo $comment=$_POST['comment'];
echo "<br>";
$jsonarray=json_decode($comment);
echo json_encode($jsonarray);


echo "Third Breaking from comma";
echo "<br>";
$allval=explode(',',$jsonarray1);
print_r($allval);

?>

请帮忙

4

2 回答 2

0

这是一种简洁而简单的方法。在您的 xcode 实现文件中创建如下方法:

注意:请记住根据您的需要对其进行自定义。重要的一点是传递名为“requestArray_”的请求数组。http://localhost/test/index.php用您想要的 url 更改 url 位

-(NSArray *) setRequestWithRequestArray:(NSArray *)requestArray_{
    NSError *error;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:requestArray_
                                                       options:NSJSONWritingPrettyPrinted error:&error];
    NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

    NSString *post = [NSString stringWithFormat:@"requestArray=%@", jsonString];

    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:NO];

    NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:@"http://localhost/test/index.php"]];
    [request setHTTPMethod:@"POST"];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/x-www-form-urlencoded;charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:postData];

    NSURLResponse *response;
    NSError *errors = nil;

    NSData *POSTReply = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];

    NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:POSTReply options:0 error:&errors];

    NSLog(@"request %@", request);
    NSLog(@"jsonArray%@",jsonArray);

    return jsonArray;
}

在你的 php 中创建一个像这样的测试方法:

$Array = $_POST["requestArray"];
function testMethod($Array){
        $get_result = array();
        $get_result = json_decode($Array);

        foreach($get_result as $key1 => $value){
            $result = array(
                    $key1 => $value, 
                    $key1 => $value, 
                    $key1 => $value, 
                    $key1 => $value
            );
        }

        sendResponse(200, json_encode($result));
            return true;
    }
于 2014-06-23T15:58:02.373 回答
0

尝试以下代码可能对您有所帮助。尝试创建一个 NSMutableDictionary 然后 POST。

        NSMutableDictionary *dictionnary = [NSMutableDictionary dictionary];
        [dictionnary setObject:@"First" forKey:@"First"];


        NSError *error = nil;
        NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionnary
                                                           options:kNilOptions
                                                             error:&error];   

        NSString *urlString =@"Your URL";

        NSURL *url = [NSURL URLWithString:urlString];
 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];

        [request setHTTPBody:jsonData];
        NSURLResponse *response = NULL;
        NSError *requestError = NULL;
        NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&requestError];
        NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding] ;
         NSLog(@"%@", responseString);
于 2012-11-30T07:53:19.177 回答