Ios 尝试请求POST方法时,ASIFormDataRequest返回NULL

Ios 尝试请求POST方法时,ASIFormDataRequest返回NULL,ios,post,asihttprequest,asiformdatarequest,Ios,Post,Asihttprequest,Asiformdatarequest,嗨,我在试着发一个帖子 我的代码: NSURL *url = [NSURL URLWithString:urlString]; __weak ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; [request setDelegate:self]; [request setRequestMethod:@"POST"]; [request setPostValue:@"Just

嗨,我在试着发一个帖子

我的代码:

NSURL *url = [NSURL URLWithString:urlString];
    __weak ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
    [request setDelegate:self];
    [request setRequestMethod:@"POST"];
    [request setPostValue:@"JustinBieber" forKey:@"fname"];

    [request setCompletionBlock:^{
        NSString *result = [request responseString];
        NSDictionary *dict = [result JSON];
        NSLog(@"dict -%@",dict);
    }];
    [request setFailedBlock:^{
        NSLog(@"error %@",[request error]);

    }];
    [request startAsynchronous];
当我运行代码时,它返回一个空值。我的URL字符串是正确的,请求也没有给我错误。我在网上试用过,返回一个{status:success}它将返回一个状态为successful或failed的字典。

像这样使用。希望这会有所帮助


您是否在返回JSON的脚本中设置了标题?假设您使用的是PHP:

header('Content-Type: application/json');
默认的MIME类型是text/plain,而不是application/json。如果没有正确设置MIME类型,那么基本上就是在解析整个文档。 因此,不是:

{"status":"success"}
您很可能正在尝试分析:

<html>
  <head></head>
  <body>{"status":"success"}</body>
</html>
请尝试使用此代码-

NSURL *url = [NSURL URLWithString:urlString];
__unsafe_unretained ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setRequestMethod:@"POST"];
[request setPostValue:@"JustinBieber" forKey:@"fname"];
[request setDelegate:self];

__block id jsonData;
[request setTimeOutSeconds:300];
[request setCompletionBlock:^(){
    NSError *error = nil;
    NSString *responseString = (request.responseString.length)?request.responseString:@"";
    NSLog(@"%@",responseString);
    NSData *responseData = [responseString dataUsingEncoding:NSUTF8StringEncoding];
    jsonData = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
    if(error)
        completionBlock(nil, error, task);
    else
        completionBlock(jsonData, error, task);
}];

[request setFailedBlock:^{
    completionBlock(nil, request.error, task);
}];
[request startAsynchronous];

可能会对您有帮助。

谢谢您的回复,但仍然返回null。请检查URL及其值。或显示URL,以便我可以在我的末尾进行检查。我的URL绝对有效,我甚至尝试在web上执行此操作,并返回成功状态。是的,但可能在URL中,您正在使用的字符串是GET或POST。例如:www.xyz.com/files/account?fname=%@如果您的URL是这样的,那么字符串值应该是NSString*strURL=[NSString stringwithformat:@www.xyz.com/files/account?fname=%@,value];不要像[请求setPostValue:@JustinBieber-forKey:@fname]那样发帖;我明白你的意思了,谢谢,我的网址在帖子上,嗨,它给了我一个错误,我想这是处理回复的字典。错误:错误1错误域=NSCOCAERRORDOMAIN代码=3840操作无法完成。可可错误3840。JSON文本不是以数组或对象和允许未设置片段的选项开头的。UserInfo=0x8f5ab50{NSDebugDescription=JSON文本没有以数组或对象开头,并且没有设置允许片段的选项。}您是否在应用程序中添加了libz.1.2.5.dylib框架?请仔细阅读并感谢,我已经添加了libz.1.2.5.dylib,仍然是相同的错误。
-(void)exe method
 {
     NSString *strURL=@"---your URL----";
     ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:strURL]];
     [request setDelegate:self];
     [request setRequestMethod:@"POST"];
     [request setPostValue:@"JustinBieber" forKey:@"fname"];
     [request setTimeOutSeconds:60];
     [request startAsynchronous];
}


- (void)requestFinished:(ASIHTTPRequest *)request
{
        NSString *receivedString = [request responseString];
       NSLog(@"output %@",receivedString );

}
- (void)requestFailed:(ASIHTTPRequest *)request 
{
       NSString *receivedString = [request responseString];
       NSLog(@"output %@",receivedString );

}
-(void)exe method
 {
     NSString *strURL=@"---your URL----";
     ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:strURL]];
     [request setDelegate:self];
     [request setRequestMethod:@"POST"];
     [request setPostValue:@"JustinBieber" forKey:@"fname"];
     [request setTimeOutSeconds:60];
     [request startAsynchronous];
}


- (void)requestFinished:(ASIHTTPRequest *)request
{
        NSString *receivedString = [request responseString];
       NSLog(@"output %@",receivedString );

}
- (void)requestFailed:(ASIHTTPRequest *)request 
{
       NSString *receivedString = [request responseString];
       NSLog(@"output %@",receivedString );

}