将数据发布到服务器和响应是:“消息”:“发生错误。”
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 好的兄弟。以上是关于将数据发布到服务器和响应是:“消息”:“发生错误。”的主要内容,如果未能解决你的问题,请参考以下文章
Angular - 连接到代理服务器并获得响应,但随后显示尝试代理时发生错误:本地主机到实际服务器