0

Railsサーバーに投稿リクエストを送信しようとしているiOSアプリケーションがあります。リクエストメソッドのセット本体はこんな感じ。

- (void)setBody:(NSString *)body{
    requestString = body;
    NSLog(@"request string: %@",requestString);
    [request setHTTPBody:[requestString dataUsingEncoding:NSUTF8StringEncoding]];
}

ログでリクエスト文字列を確認すると、次のように正しく出力されていることがわかります。

{"commit":"Create Order","order":{"price":"1","street_address":"(null)","state":"(null)","country":"USA","city":"(null)","zipcode":"(null)"}}

ただし、データが Web アプリケーションに到達すると、元のエスケープされていない引用符で取得されます。

Parameters: {"{\"commit\":\"Create Order\",\"order\":{\"price\":\"1\",\"street_address\":\"(null)\",\"state\":\"(null)\",\"country\":\"USA\",\"city\":\"it\",\"zipcode\":\"(null)\"}}"=>nil}

可能性はあるかもしれませんが、Railsの問題だとは思いません。

助言がありますか?

元の文字列は別の場所で次のように宣言されています。

NSString *order = [NSString stringWithFormat:@"{\"commit\":\"Create Order\",\"order\":{\"price\":\"%@\",\"street_address\":\"%@\",\"state\":\"%@\",\"country\":\"%@\",\"city\":\"%@\",\"zipcode\":\"%@\"}}",@"1",streetAddressFieldText,stateFieldText,@"USA",cityFieldText,zipFieldText];
4

1 に答える 1

0

問題が解決しました。問題は、実際にはレールを使用したサーバー側でした。コンテンツ タイプを宣言しなかったので、そうすることで問題が解決しました。

[request setValue:@"application/json" forHTTPHeaderField:@"content-type"];

リクエストが実行される前にこれを追加すると、Rails はエスケープされた json を正しく識別しました。

于 2012-07-24T23:05:57.603 に答える