2

这是我第一次将 JSON 发送到服务器,我不知道为什么我的 PHP 脚本没有收到调用。

我认为问题在于我如何从应用程序中设置 POST 变量,并且我抓取了错误的变量或未按$_POST['search']预期设置。

谁能指出我将如何获取发布的数据以及如何$_POST['search']正确设置

当我从 xcode 输出中查看它时,我的$var回报。0

PHP

header('Content-Type: text/json');
$var = (isset($_POST['search']) ? json_decode($_POST['search']) : false);
echo json_encode($var)

Objective-C

 NSDictionary *myJson=@{@"userID": @"1",
                           @"search":@{@"for":@"routine",
                                       @"page":@"1",
                                       @"orderBy":@"new",
                                       @"type":@"1"}
                           };
   NSURL *url = [[NSURL alloc]initWithString:@"http://192.168.1.64/"];
        AFHTTPClient *httpClient = [[AFHTTPClient alloc]initWithBaseURL:url];
        httpClient.parameterEncoding = AFJSONParameterEncoding;
        NSDictionary *params = myJson;
        NSURLRequest *request = [httpClient requestWithMethod:@"POST" path:@"http://192.168.1.64/igym/bootstrap.php" parameters:params];

        AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
                                                                                            success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON){
                                                                                                NSLog(@"Inside the success block %@",JSON);
                                                                                            }
                                                                                            failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON){
                                                                                                NSLog(@"json text is: %@", JSON);
                                                                                                NSLog(@"Request failed with error: %@, %@", error, error.userInfo);
                                                                                            }];
        [operation start];
4

2 回答 2

3

问题是您将所有参数(包括“搜索”)编码为 json:

httpClient.parameterEncoding = AFJSONParameterEncoding;

因此,您无法使用 php 在 php 中访问它

$_POST['search'];

在这种情况下,数据不会通过邮寄方式发送

你可以做两件事:

  • 仅将搜索字典的内容编码为 JSON(而不是所有参数)
  • 通过以下方式访问数据:

$post = json_decode(file_get_contents('php://input'));

$post 将包含您所有发布的数据 json 编码,如下所示:

{
    search =     {
        for = routine;
        orderBy = new;
        page = 1;
        type = 1;
    };
    userID = 1;
}
于 2013-06-01T17:51:13.097 回答
0

问题大概出在这里:

path:@"http://192.168.1.64/igym/bootstrap.php"

您已经指定了客户端的基本 URL,因此您不必将其放在路径字符串中。尝试用以下代码替换此代码:

path:@"igym/bootstrap.php"

除此之外,另一个问题是您发布参数的方式。你应该像这样发送它们:

NSString *jsonParam = @"{\"userID\": \"1\",
                           \"search\":{\"for\":\"routine\",
                                       \"page\":\"1\",
                                       \"orderBy\":\"new\",
                                       \"type\":\"1\"}
                           }";
NSDictionary *params = [NSDictionary dictionaryWithObject:jsonParam forKey:@"search"];

您的参数在 PHP 脚本中被命名为“search”,它的值是一个 JSON 字符串。

请注意,我使用反斜杠来转义 NSString 中的引号。

于 2013-06-01T17:09:27.527 回答