1

NSDictionaries の NSArray を iOS アプリから PHP Web サービスに送信しようとしていますが、特定の文字列フィールドの受信に問題があります。

このように 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 を ios の NSLog に戻して、$itemId と $itemPrice が正しく取得されていることを確認します。

    $orderStatusJson = json_encode($orderStatus);
    header('Content-Type: application/json');
    echo $orderStatusJson;

ただし、どちらのアプローチでも、$itemId は「null」として表示されますが、$itemPrice は正しい値を示しています。アイテムIDが存在するという事実は、私が送信しているパラメーターであることを知っています.phpに送信する前にiosにログを記録し、その時点で正しく表示されるためです。

php で NSDictionaries の NSArray を受信/反復処理しているときに、何か不足している場合や正しい方法で処理していない場合はお知らせください。. 私は朝から物事に夢中になっています。これは何か小さなものに違いない/または非常に基本的なものが欠けているに違いないことはわかっていますが、それを理解できないようです. あなたの応答は大歓迎です。

編集:

iOS で php NSLogged から受け取った JSON 出力:

JSON - {
"ITEM_ID" = "<null>";
"ITEM_PRICE" = "3.99";
}

ありがとう、マイク!

4

2 に答える 2

0

あなたのitem_idは「null」を出力しています。そのため、phpはそれを「null」と読んでいます。おそらく、NSDictionary を調べて、null 項目を出力している理由を確認する必要があります。

于 2013-03-25T01:19:23.857 に答える
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 を渡す必要があります。ここで、値は URL エンコードされたデータです。

key1=value1&key2=value2&key3=value3
于 2013-05-25T10:52:30.977 に答える