将数据发布到服务器和响应是:“消息”:“发生错误。”

Posted

技术标签:

【中文标题】将数据发布到服务器和响应是:“消息”:“发生错误。”【英文标题】:Posting data to server and response is :"Message":"An error has occurred."将数据发布到服务器和响应是:“消息”:“发生错误。” 【发布时间】:2016-12-21 04:37:16 【问题描述】:

我尝试了许多将数据发布到服务器的方法,但都没有奏效,得到的唯一响应是:

"Message":"发生错误。"

以下是我最近尝试的方法。

NSString *cust_id=@"2";
NSString *Prod_ID=@"18";
NSString *Vend_ID=@"1";
NSString *Quant=@"2";
NSString *post =[NSString stringWithFormat:@"customerid=%@&productid=%@&vendorid=%@&quantity=%@",cust_id,Prod_ID,Vend_ID,Quant];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSURL *url = [NSURL URLWithString:@"http://dealnxt.com/api/addtocart"];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
[theRequest setHTTPMethod:@"POST"];
[theRequest setHTTPBody:postData];
NSURLResponse *response;
NSError *error;
NSData *urlData=[NSURLConnection sendSynchronousRequest:theRequest returningResponse:&response error:&error];
NSString *str=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
NSLog(@"str:%@",str);

【问题讨论】:

联系服务器开发者,要求他们提供更好的错误信息。 @rmaddy 一切都是从服务器端修复的 这是服务器端错误,请先尝试使用邮递员发布请求,看看是否错误,另外,我认为应该是NSUTF8StringEncoding而不是NSASCIIStringEncoding @Tj3n 嘿!这个答案很有帮助,它解决了我的问题:) 非常感谢 @Shikha,您的错误消息来自网络服务端,请检查并确保您传递了正确的参数。谢谢 【参考方案1】:

您在查询字符串中传递数据,因为您要发布的数据应作为转换为数据的 NSDictionary 对象传递。

【讨论】:

【参考方案2】:

谢谢@Tj3N,你的回答很有帮助。

只需要更改编码类型。从 NSASCIIStringEncoding 到 NSUTF8StringEncoding。 以下是更新后的代码。

NSString *post =[NSString stringWithFormat:@"customerid=%@&productid=%@&vendorid=%@&quantity=%@",cid,PID,VID,QQ];
NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
NSURL *url = [NSURL URLWithString:@"URL"];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
[theRequest setHTTPMethod:@"POST"];
[theRequest setHTTPBody:postData];
NSURLResponse *response;
NSError *error;
NSData *urlData=[NSURLConnection sendSynchronousRequest:theRequest returningResponse:&response error:&error];
NSString *str=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
NSLog(@"str:%@",str);

【讨论】:

【参考方案3】:

BASE_URL = PASS_YOUR_URL _params = parameters // AS NSMutableDictionary 试试这个。

 NSMutableDictionary *params = [[NSMutableDictionary alloc]init];
 [params setValue:YOUR_VALUE forKey:@"cust_id"]; // here pass your field that you want to pass as parameter. 
 [params setValue:YOUR_VALUE forKey:@"Prod_ID"];

 NSString *url = [BASE_URL stringByAppendingString:_action];

 AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:[NSURL URLWithString:url]];
 manager.requestSerializer = [AFHTTPRequestSerializer serializer];
 manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html", nil];
[manager POST:url parameters:_params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) 
        NSLog(@"response = %@", responseObject);
        if( _success )
        
            _success( responseObject ) ;
        
     failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) 
            NSLog(@"error = %@", error);
            if( _failure )
            
                _failure( error) ;
            
];

【讨论】:

不,您不需要AFNetworking。这很有帮助,但不是必需的。 @rmaddy 那么有什么问题呢? @HimanshuMoradiya 我们不知道,因为 OP 没有告诉我们问题出在哪里。服务器正在返回一条无用的错误消息。在 OP 发现实际的服务器错误是什么之前,无法知道发布的代码有什么问题。简单地建议 OP 用AFNetworking 替换他们的代码不会解决任何问题。 @HimanshuMoradiya 话虽如此,您的代码可能会解决问题。但这并不意味着您需要AFNetworking。 OP 只需要修复现有代码中的任何错误。 @rmaddy 好的兄弟。

以上是关于将数据发布到服务器和响应是:“消息”:“发生错误。”的主要内容,如果未能解决你的问题,请参考以下文章

HTTP的响应状态码

Angular - 连接到代理服务器并获得响应,但随后显示尝试代理时发生错误:本地主机到实际服务器

使用 RestTemplate 测试 ExceptionHandler

发生错误时使用 JAX-WS 跟踪 XML 请求/响应

如何配置Kafka RPC调用者主题和组

将消息发送到套接字端口并使用Spring Integration接收响应