我正在尝试将我的ios应用程序的NSArray NSArray发送到我的php webservice并且在接收某个字符串字段时遇到问题。
我以这种方式形成POST参数:
NSDictionary *orderInformation = [NSDictionary dictionaryWithObjectsAndKeys:self.orderItems,@"ORDER_ITEMS",storeId,@"STORE_ID",userId,@"USERID",nil];
“storeId”和“userId”是字符串,我在php中接收它们没有问题,但“self.orderItems”是NSDictionaries的NSMutableArray,这是我遇到问题的地方。
self.orderItems中的NSDictionaries具有以下键:“ITEM_ID”和“ITEM_PRICE”。
这是我将“orderInformation”发布到php的代码:
NSString *webService = @"http://localhost/~testuser/Developer/ReceiveOrder.php?rquest=placeOrder";
NSURL *url = [NSURL URLWithString:webService];
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:url];
NSURLRequest *placeOrderRequest = [client requestWithMethod:@"POST" path:webService parameters:orderInformation];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:placeOrderRequest success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON){
[self orderPlaced:JSON];
}failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON){
NSLog(@"Request Failed with Error: %@, %@", error, error.userInfo);
}];
[operation start];
我的php中接收此请求的方法如下:
//Place Order
public function placeOrder(){
$userId = $_POST['USERID'];
$storeId = $_POST['STORE_ID'];
$orderItems = array();
$itemInfo = array();
$orderItems = $_POST['ORDER_ITEMS'];//This is where I receive my NSArray of NSDictionaries
我已尝试过这两种迭代$ orderItems的方法,但两者都没有获取正确的结果。出于某种原因,ITEM_ID出现为null,但ITEM_PRICE正在获取正确的值。
接近1:
for ($i=0; $i<count($orderItems); $i++)
{
$itemInfo = $orderItems[$i]; //receiving correct value
$itemId = $itemInfo['ITEM_ID']; //receiving correct value
$itemPrice = $itemInfo['ITEM_PRICE']; //receiving correct value
$orderStatus['ITEM_ID'] = $itemId ; //comes out as null
$orderStatus['ITEM_PRICE'] = $itemPrice; //receiving correct value
}
方法2:
foreach ($orderItems as $itemInfo){
$itemId = $itemInfo['ITEM_ID']; //receiving correct value
$itemPrice = $itemInfo['ITEM_PRICE']; //receiving correct value
$orderStatus['ITEM_ID'] = $itemId ; //comes out as null
$orderStatus['ITEM_PRICE'] = $itemPrice; //receiving correct value
}
我将$ orderStatus返回给iLog到NSLog,以确保正确检索$ itemId和$ itemPrice:
$orderStatusJson = json_encode($orderStatus);
header('Content-Type: application/json');
echo $orderStatusJson;
但是在这两种方法中,$ itemId显示为“null”,但$ itemPrice显示正确的值。我知道item id存在的事实是我发送的参数,因为我在发送到php之前将它们记录在ios中,并且它们在那时正确显示。
如果我在php中接收/迭代NSArray的NSArray时错过了某些东西/没有做正确的事情,请你告诉我吗? 。从早上起我就一直生气。我知道这一定是小事/或者我必须遗漏一些非常基本的东西,但我似乎无法弄明白。非常感谢您的回复。
编辑:
从ios中的php NSLogged收到的JSON输出:
JSON - {
"ITEM_ID" = "<null>";
"ITEM_PRICE" = "3.99";
}
谢谢, 迈克!
答案 0 :(得分:0)
您的item_id输出“null”,这就是为什么php将其读为“null”。也许您应该检查您的NSDictionary以查看它输出空项的原因。
答案 1 :(得分:0)
您正在以JSON身份发送,但未以JSON身份接收。在您的PHP中,您将不得不这样做:
$jsonString = file_get_contents('php://input');
if ($jsonString != "") {
error_log("[".$jsonString ."]");
$jsonArray = json_decode($jsonString, true);
error_log(print_r($jsonArray,true));
}
要按照您期望的方式发送给PHP,您需要在帖子正文中传递kvp,其中value是url编码数据:
key1=value1&key2=value2&key3=value3