我需要绑定一个对象中的参数,并将该对象作为POST请求传递,以便从API接收成功的信息。
{
customer = {
"auth_token" = "";
"device_id" = 3e708bf1a49cdd06;
"email_address" = "abc@xyz.in";
name = abc;
number = 1234567890;
"resend_token" = true;
};
}
这是我需要与帖子请求一起发送的对象。但是当我将其转换为字符串并将其发布时,整个对象就成了关键,值变为nil
。它将发布为{"{customer.....}=>nil}
。
该对象应张贴为
{"customer:
{"auth_token":"","device_id":"3e708bf1a49cdd06","email_address":"abc@xyz.in",
"name":"abc","number":"1234567890","resend_token":"true"}}
这是我目前的尝试:
NSArray *objects = [[NSArray alloc] initWithObjects:@"",@"3e708bf1a49cdd06",@"abc@xyz.in",@"abc",@"1234567890",@"true", nil];
NSArray *keys = [[NSArray alloc] initWithObjects:@"auth_token",@"device_id",@"email_address",@"name",@"number",@"resend_token", nil];
NSDictionary *tempJsonData = [[NSDictionary alloc] initWithObjects:objects forKeys:keys];
NSDictionary *finalJsonData = [[NSDictionary alloc] initWithObjectsAndKeys:tempJsonData,@"customer", nil];
NSData *temp = [NSJSONSerialization dataWithJSONObject:finalJsonData options:NSJSONWritingPrettyPrinted error:nil];
NSString *postString = [[NSString alloc] initWithData:temp encoding:NSUTF8StringEncoding];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
[request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"];
[request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]];
[request setHTTPMethod:@"POST"];
NSError *error = nil; NSURLResponse *response = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
这里使用的很多代码都是在没有正确理解的情况下使用的,并直接从其他StackOverflow答案中获取,所以请原谅任何糟糕的编程习惯。
我该怎么做?任何帮助表示赞赏。谢谢。
答案 0 :(得分:1)
以下是向服务器发送POST请求的示例代码。
-(void)doRequestPost:(NSString*)url andData:(NSDictionary*)data{
requestDic = [NSDictionary dictionaryWithDictionary:data];
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:data options:kNilOptions error:nil];
NSString *jsonString=[[NSString alloc] initWithBytes:[jsonData bytes] length:[jsonData length] encoding:NSStringEncodingConversionAllowLossy];
NSLog(@"Request Object:\n%@\n",data);
NSLog(@"Request String:\n%@\n",jsonString);
NSMutableURLRequest *theReq=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30];
[theReq addValue: @"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[theReq setHTTPMethod:@"POST"];
[theReq addValue:[NSString stringWithFormat:@"%lu",(unsigned long)[jsonString length]] forHTTPHeaderField:@"Content-Length"];
[theReq setHTTPBody:[jsonString dataUsingEncoding:NSUTF8StringEncoding]];
connection = [NSURLConnection connectionWithRequest:theReq delegate:self];
}
愿这有用,并解决您的问题。
答案 1 :(得分:1)
NSString *post =[[NSString alloc] initWithFormat:@"id=%d&restaurant_name=%@", restaurnt_Id, _rest_NameTxt.text];
NSLog(@"PostData: %@",post);
NSURL *url=[NSURL URLWithString:EDIT_RESTAURANT_API];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"APPLICATION/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"APPLICATION/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
_responseData = [[NSMutableData alloc] init];
[NSURLConnection connectionWithRequest:request delegate:self];
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
[_responseData setLength:0];
[_responseCityData setLength:0];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[_responseData appendData:data];
[_responseCityData appendData:data];
}
-(BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace {
return YES;
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
[COMMON showErrorAlert:@"Internet Connection Error!"];
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection {
NSString *responseString = [[NSString alloc] initWithData:_responseData encoding:NSUTF8StringEncoding];
responseString = [responseString stringByReplacingOccurrencesOfString:@"\n" withString:@" "];
NSLog(@"%@", responseString);
}
在connectionDidFinishLoading方法
中完成任务答案 2 :(得分:1)
你可以尝试下面的代码。而不是将数据转换为字符串,将其设置为HTTPBody,如
$model = Mage::getModel("module/tablemodel")->load($uuid,'uuid'); //uuid is the PK// No id field in the table
$code = $model->getCode();
echo $code;
/*Works fine as it prints the code in the table for the corresponding row, hence I'm sure the model is loaded fine*/
$data = array('status'=>1,'modified_datetime'=>date('Y-m-d H:i:s'));
$model->addData($data);
$modelApprovalLog->save();