2436


以下の連想配列 dicを post送信しようとしていますが上手くいきません。

連想配列 dicは以下の要素を持ちます。

[code]

    key `"id"`         : `<文字列>`
    key `"cond_array"` : `<配列>`
    
[/code]

また、配列cond_arrayは、文字配列の配列で今回のコードでは以下の要素を持ちます。

[code]

    cond_array[0]=["2","8","1"]
    cond_array[1]=["2","3"]
    
[/code]

* * *

このデータをPOST送信しようとしていますがうまくいきません。 教えていただける方おられましたらご教授願います。

書いたコードは以下になります。

[code]

        let URL = NSURL(string: "aaa.php/")
        let request = NSMutableURLRequest(URL: URL!)
    
        request.HTTPMethod = "POST"
        var data2: [String] = ["2", "8", "1"]
        var data3: [String] = ["2", "3"]
        var array1 = [data2, data3]
        var dic: [String: AnyObject] = [
            "id": "abc",
            "cond_array": array1
        ]
        request.HTTPBody = NSJSONSerialization.dataWithJSONObject(dic, options: nil, error: nil)        
        let connection = NSURLConnection(request: request, delegate: self, startImmediately: false)!    
        var data: NSData! = NSURLConnection.sendSynchronousRequest(request, returningResponse: nil, error: nil)
    
[/code]


CC BY-SA 3.0
2014-12-23T14:57:29.337
2435
2014-12-23T16:20:56.370
2014-12-23T16:20:56.370
728
5589
question
ios swift xcode
swiftで、2次元連想配列をjsonでPOSTする方法


受信はの様ですが、php側のコードはどうなっていますか？

以下でも少し触れましたが、jsonを受け取る場合はストリームから受け取るようにしなければなりません。

echo file_get_contents('php://input');

[JavascriptをつかったAjaxのPost処理](https://ja.stackoverflow.com/questions/2272/javascript%E3%82%92%E3%81%A4%E3%81%8B%E3%81%A3%E3%81%9Fajax%E3%81%AEpost%E5%87%A6%E7%90%86/2279#2279)

それ以外ではurlが "aaa.php/" とスラッシュで終わっていますがこちらも問題ないでしょうか。

送信結果確認のために、errorも受け取るようにした方が良いかと思います。

* * *

# 追記

一応、以下の様なコードをplaygroundから送信できることは確認しました。

[code]

    import UIKit
    
    let URL = NSURL(string: "YOURURL/sample.php")
    let request = NSMutableURLRequest(URL: URL!)
    request.HTTPMethod = "POST"
    var data2: [String] = ["2", "8", "1"]
    var data3: [String] = ["2", "3"]
    var array1 = [data2, data3]
    var dic: [String: AnyObject] = [
        "id": "abc",
        "cond_array": array1
    ]
    
    
    // jsonヘッダの追加。無くても取得できましたが、あった方が良いかと思います。
    //request.addValue("application/json", forHTTPHeaderField: "Accept")
    //request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    
    request.HTTPBody = NSJSONSerialization.dataWithJSONObject(dic, options: nil, error: nil)
    
    // 普通のPOSTの場合
    // request.HTTPBody = "id=1".dataUsingEncoding(NSUTF8StringEncoding)
    
    
    let connection = NSURLConnection(request: request, delegate: nil, startImmediately: false)!
    var error: NSError?
    var response: NSURLResponse?
    var data: NSData! = NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: &error)
    
    println(NSString(data:data, encoding: NSUTF8StringEncoding))
    
[/code]

sample.phpは以下の様なコードです。

[code]

    <?php
    
    var_dump($_POST);  // POSTの確認。JSONには不要。  
    
    echo file_get_contents('php://input');  // JSONを取得するため。  
    
[/code]


CC BY-SA 3.0
2014-12-23T15:42:06.250
2436
2014-12-23T16:11:33.223
2017-04-13T12:52:39.113
-1
728
2435
answer