Home > Backend Development > PHP Tutorial > iOS调用Laravel接口返回错误信息

iOS调用Laravel接口返回错误信息

WBOY
Release: 2016-06-06 20:32:39
Original
1396 people have browsed it

iOS端代码如下:

<code>AFHTTPRequestOperationManager *manage = [[AFHTTPRequestOperationManager alloc]initWithBaseURL:[NSURL URLWithString:@"http://localhost:8000/login/signin"]];

manage.requestSerializer = [AFJSONRequestSerializer serializer];
manage.responseSerializer = [AFJSONResponseSerializer serializer];

[manage.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
manage.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/plain", @"text/javascript", @"text/json", @"text/html", nil];

[manage POST:@"login/signin" parameters:[self.myLogin toParams] success:^(AFHTTPRequestOperation *operation, id responseObject) {
        DebugLog(@"\n===========response===========\n%@:\n%@", @"login/signin", responseObject);
        [_activityIndicator stopAnimating];
        _loginButton.enabled = YES;

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        DebugLog(@"\n===========response===========\n%@:\n%@", @"login/signin", error);
        [_activityIndicator stopAnimating];
        _loginButton.enabled = YES;
    }];
</code>
Copy after login
Copy after login

Laravel的代码如下:

<code>routes.php
----------
Route::post('login/signin',[
    'as'=>'signin','uses'=>'Login\LoginController@signin'
]);



LoginController.php
----------
public function signin()
{  
    $message = "登录成功";
    $data = array('phone'=>'13800138000','password'=>'123456');
    $code = 0;

    return response()->json(['message'=>$message,'data'=>$data,'code'=>0]);
}
</code>
Copy after login
Copy after login

提示错误:Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (JSON text did not start with array or object and option to allow fragments not set.) UserInfo=0x7fe00d90a3a0 {NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}

但是将Route::post 改成 Route::get

manage POST:@"login/signin" 改成 manage GET:@"login/signin"

可以返回数据如下:

<code>{
    code = 0;
    data =     {
        password = 123456;
        phone = 13800138000;
    };
    message = "\U767b\U5f55\U6210\U529f";
}
</code>
Copy after login
Copy after login

请问问题出在哪里,求帮助,谢谢各位:D 。

使用Paw查看POST数据会出现php错误如下:

<code>Deprecated: Automatically populating $HTTP_RAW_POST_DATA is 
deprecated and will be removed in a future version. To avoid this
warning set 'always_populate_raw_post_data' to '-1' in php.ini and 
use the php://input stream instead. in Unknown on line 0

Warning: Cannot modify header information 
- headers already sent in Unknown on line 0
</code>
Copy after login
Copy after login

回复内容:

iOS端代码如下:

<code>AFHTTPRequestOperationManager *manage = [[AFHTTPRequestOperationManager alloc]initWithBaseURL:[NSURL URLWithString:@"http://localhost:8000/login/signin"]];

manage.requestSerializer = [AFJSONRequestSerializer serializer];
manage.responseSerializer = [AFJSONResponseSerializer serializer];

[manage.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
manage.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/plain", @"text/javascript", @"text/json", @"text/html", nil];

[manage POST:@"login/signin" parameters:[self.myLogin toParams] success:^(AFHTTPRequestOperation *operation, id responseObject) {
        DebugLog(@"\n===========response===========\n%@:\n%@", @"login/signin", responseObject);
        [_activityIndicator stopAnimating];
        _loginButton.enabled = YES;

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        DebugLog(@"\n===========response===========\n%@:\n%@", @"login/signin", error);
        [_activityIndicator stopAnimating];
        _loginButton.enabled = YES;
    }];
</code>
Copy after login
Copy after login

Laravel的代码如下:

<code>routes.php
----------
Route::post('login/signin',[
    'as'=>'signin','uses'=>'Login\LoginController@signin'
]);



LoginController.php
----------
public function signin()
{  
    $message = "登录成功";
    $data = array('phone'=>'13800138000','password'=>'123456');
    $code = 0;

    return response()->json(['message'=>$message,'data'=>$data,'code'=>0]);
}
</code>
Copy after login
Copy after login

提示错误:Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (JSON text did not start with array or object and option to allow fragments not set.) UserInfo=0x7fe00d90a3a0 {NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}

但是将Route::post 改成 Route::get

manage POST:@"login/signin" 改成 manage GET:@"login/signin"

可以返回数据如下:

<code>{
    code = 0;
    data =     {
        password = 123456;
        phone = 13800138000;
    };
    message = "\U767b\U5f55\U6210\U529f";
}
</code>
Copy after login
Copy after login

请问问题出在哪里,求帮助,谢谢各位:D 。

使用Paw查看POST数据会出现php错误如下:

<code>Deprecated: Automatically populating $HTTP_RAW_POST_DATA is 
deprecated and will be removed in a future version. To avoid this
warning set 'always_populate_raw_post_data' to '-1' in php.ini and 
use the php://input stream instead. in Unknown on line 0

Warning: Cannot modify header information 
- headers already sent in Unknown on line 0
</code>
Copy after login
Copy after login

phpinfo() 知道 always_populate_raw_post_data 修改成为-1即可

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template