【问题标题】:ASIFormDataRequest returns NULL when trying to request a POST method尝试请求 POST 方法时 ASIFormDataRequest 返回 NULL
【发布时间】:2014-09-08 11:51:53
【问题描述】:

您好,我正在尝试发出 POST 请求

我的代码:

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];

当我运行我的代码时,它会返回一个 (null) 值。我的 urlString 是正确的,请求也没有给我错误。我已经在网络上尝试过它并返回一个 {"status":"success"} (它将返回一个状态为成功或失败的字典)。

【问题讨论】:

    标签: ios post asihttprequest asiformdatarequest


    【解决方案1】:

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

    -(void)exe method
     {
         NSString *strURL=@"---your URL----";
         NSURL *url=[NSURL URLWithString:strURL];
         ASIFormDataRequest *request = [[ASIFormDataRequest alloc] initWithURL:url];
         [request setRequestMethod:@"POST"];
         [request setPostValue:@"JustinBieber" forKey:@"fname"];
         [request setDelegate:self];
         [request setTimeOutSeconds:60];
         [request startAsynchronous];
    }
    
    
    - (void)requestFinished:(ASIHTTPRequest *)request
    {
    
        NSError *error;
        if(!error)
        {
    
            NSString *receivedString = [request responseString];
            NSDictionary *dic = [receivedString JSONValue];
           NSLog(@"output %@",dic);
    
         }
    
    
    }
    - (void)requestFailed:(ASIHTTPRequest *)request 
    {
    
    
    }
    

    【讨论】:

    • 感谢您的回复,但仍然返回(null)。
    • 检查 URL 和 Key 及其值。或者显示 URL,以便我可以在最后检查。
    • 我的 URL 绝对有效,我什至尝试在网络上进行,它返回状态成功。
    • 是的,但可能在您使用的 URL 中,因为字符串是 GET 或 POST。例如: www.xyz.com/files/account?fname=%@ 如果你的 URL 像这样,那么字符串值应该是 NSString *strURL=[NSString stringwithformat:@"www.xyz.com/files/account?fname=% @“,价值];并且不要发布像 [request setPostValue:@"JustinBieber" forKey:@"fname"];
    • 我明白你的意思了,谢谢,我的网址在 POST 上,website.com/appName/report/public/index.php/insert
    【解决方案2】:

    试试这个代码 -

    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];
    

    可能对你有帮助。

    【讨论】:

    • 嗨,它给了我一个错误,我认为它处理的是字典的回复。错误:错误 1 ​​错误域 = NSCocoaErrorDomain 代码 = 3840 “操作无法完成。(可可错误 3840。)”(JSON 文本没有以数组或对象开头,并且允许未设置片段的选项。) UserInfo = 0x8f5ab50 { NSDebugDescription=JSON 文本没有以数组或对象开头,并且允许未设置片段的选项。}
    • 您是否在应用中添加了“libz.1.2.5.dylib”框架?
    • 谢谢,我已经添加了“libz.1.2.5.dylib”,仍然是同样的错误。
    【解决方案3】:

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

    header('Content-Type: application/json');
    

    默认的 MIME 类型是“text/plain”,而不是“application/json”。如果您没有正确设置 MIME 类型,您基本上是在尝试解析整个文档。



    所以而不是:

    {"status":"success"}
    

    您最有可能尝试解析:

    <html>
      <head></head>
      <body>{"status":"success"}</body>
    </html>
    

    【讨论】:

      【解决方案4】:
      -(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 );
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-04
        • 2018-02-23
        • 1970-01-01
        • 2015-08-14
        • 1970-01-01
        • 2017-05-07
        • 1970-01-01
        相关资源
        最近更新 更多