0

我想将字典数据发送到服务器,但服务器的 POST 响应显示为空白。

func HitApi(callback: (NSDictionary) -> Void){
        let mapDict = [ "1":"First", "2":"Second"]
        let json = [ "title":"ABC" , "dict": mapDict ]
        let jsonData:NSData?

        do {
            jsonData = try NSJSONSerialization.dataWithJSONObject(json, options: .PrettyPrinted)
        }catch{
            jsonData = nil
        }


        // create post request
        let url = NSURL(string: "http://myserver.com")!
        let request = NSMutableURLRequest(URL: url)
        request.HTTPMethod = "POST"
        request.setValue("application/x-www-form-urlencoded; charset=utf-8", forHTTPHeaderField: "Content-Type")
        request.setValue("application/x-www-form-urlencoded; charset=utf-8", forHTTPHeaderField: "Accept")
        request.HTTPBody = jsonData

         var dict = ["output":""]

        let task = NSURLSession.sharedSession().dataTaskWithRequest(request){ data,response,error in
            if error != nil{
                dict["output"] = "An error"
                callback(dict)
            }
            do {

                let  data = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as? NSDictionary
                dict["output"] = NSString(data: data!, encoding: NSUTF8StringEncoding)
                callback(dict)

            }catch{
                dict["output"] = "error"
                callback(dict)
            }
        }

        task.resume()
}

如果我使用这段代码,那么一切都很好:

func HitApi(callback: (NSDictionary) -> Void){
        let dataToSend:String = "1=First&2=Second"
        let jsonData:NSData?

        // create post request
        let url = NSURL(string: "http://myserver.com")!
        let request = NSMutableURLRequest(URL: url)
        request.HTTPMethod = "POST"
        request.setValue("application/x-www-form-urlencoded; charset=utf-8", forHTTPHeaderField: "Content-Type")
        request.setValue("application/x-www-form-urlencoded; charset=utf-8", forHTTPHeaderField: "Accept")
        request.HTTPBody = dataToSend.dataUsingEncoding(NSUTF8StringEncoding)

         var dict = ["output":""]

        let task = NSURLSession.sharedSession().dataTaskWithRequest(request){ data,response,error in
            if error != nil{
                dict["output"] = "An error"
                callback(dict)
            }
            do {

                let  data = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as? NSDictionary
                dict["output"] = NSString(data: data!, encoding: NSUTF8StringEncoding)
                callback(dict)

            }catch{
                dict["output"] = "error"
                callback(dict)
            }
        }

        task.resume()
}

现在服务器响应正常。但是如果我有大的嵌套字典数据,那么这个方法将失败。我的第一个代码有什么问题?

4

0 回答 0