web-dev-qa-db-ja.com

新しいApple Swift言語でJSONを投稿する方法

私はSwiftのApple言語を学ぼうとしています。私はPlaygroundにいて、Xcode 6Betaを使用しています。ローカルNodeJSサーバーに簡単なJSON投稿をしようとしています。Iすでにそれについてグーグルしていて、主要なチュートリアルは、PLAYGROUNDではなくプロジェクトでそれを行う方法を説明しています。「グーグルそれ」または「それは明らかです」または「このリンクを見てください」またはテストされていないような愚かな考えを書かないでください-and-not-functional-code

これは私が試していることです:

var request = NSURLRequest(URL: NSURL(string: "http://localhost:3000"), cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData, timeoutInterval: 5)

var response : NSURLResponse?
var error : NSError?

NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: &error)

私が試した:

var dataString = "some data"

var request = NSMutableURLRequest(URL: NSURL(string: "http://posttestserver.com/post.php"))
request.HTTPMethod = "POST"

let data = (dataString as NSString).dataUsingEncoding(NSUTF8StringEncoding)

var requestBodyData: NSData = data
request.HTTPBody = requestBodyData

var connection = NSURLConnection(request: request, delegate: nil, startImmediately: false)

println("sending request...")
connection.start()

ありがとうございました! :)

9
Thales P

ネイトの答えは素晴らしかったが、サーバーで機能するようにrequest.setvalueを変更する必要がありました

// create the request & response
var request = NSMutableURLRequest(URL: NSURL(string: "http://requestb.in/1ema2pl1"), cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData, timeoutInterval: 5)
var response: NSURLResponse?
var error: NSError?

// create some JSON data and configure the request
let jsonString = "json=[{\"str\":\"Hello\",\"num\":1},{\"str\":\"Goodbye\",\"num\":99}]"
request.HTTPBody = jsonString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)
request.HTTPMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")

// send the request
NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: &error)

// look at the response
if let httpResponse = response as? NSHTTPURLResponse {
    println("HTTP response: \(httpResponse.statusCode)")
} else {
    println("No HTTP response")
}
12
Garrett O'Grady

あなたはすべての正しい部分を持っているように見えますが、完全に正しい順序ではありません:

// create the request & response
var request = NSMutableURLRequest(URL: NSURL(string: "http://requestb.in/1ema2pl1"), cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData, timeoutInterval: 5)
var response: NSURLResponse?
var error: NSError?

// create some JSON data and configure the request
let jsonString = "json=[{\"str\":\"Hello\",\"num\":1},{\"str\":\"Goodbye\",\"num\":99}]"
request.HTTPBody = jsonString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)
request.HTTPMethod = "POST"
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")

// send the request
NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: &error)

// look at the response
if let httpResponse = response as? NSHTTPURLResponse {
    println("HTTP response: \(httpResponse.statusCode)")
} else {
    println("No HTTP response")
}
12
Nate Cook

これは、非同期リクエストを使用した少し異なるアプローチです。この方法でも同期アプローチを使用できますが、上記の全員が同期リクエストを使用したため、代わりに非同期リクエストを表示することを考えました。もう1つは、この方法の方がクリーンで簡単に見えることです。

    let JSONObject: [String : AnyObject] = [
        "name" : name,
        "address" : address,
        "phone": phoneNumber
    ]

    if NSJSONSerialization.isValidJSONObject(JSONObject) {
        var request: NSMutableURLRequest = NSMutableURLRequest()
        let url = "http://tendinsights.com/user"

        var err: NSError?

        request.URL = NSURL(string: url)
        request.HTTPMethod = "POST"
        request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.HTTPBody = NSJSONSerialization.dataWithJSONObject(JSONObject, options:  NSJSONWritingOptions(rawValue:0), error: &err)

        NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue()) {(response, data, error) -> Void in
            if error != nil {

                println("error")

            } else {

                println(response) 

            }
        }
    }
5
CodeOverRide