如何通过POST方法将数组发送到服务器?

时间:2017-07-14 08:55:55

标签: ios arrays json swift

我正在尝试将数组作为参数发送到服务器但服务器没有收到。服务器必须接收我发送的两个阵列。但在服务器中它们不会出现?我不知道这是我在服务器中的错误或错误? 我的数组名称是testAns和testQuest,我必须将它发送到参数:answer和quest。 我的代码:

let userID = UserDefaults.standard.string(forKey: "userID")
let artID = UserDefaults.standard.string(forKey: "index")
let myUrl = URL(string: "http://www.someurls.kz/modules/CheckTestF.php");
var request = URLRequest(url:myUrl!)
request.httpMethod = "POST"
var testAns = [Int]()
var testQuest = [Int]()
testAns = [131,123,23]
testQuest = [123,233,232]
let postString = "uID=97B436E41&idUser=\(userID!)&art_id=\(artID!)&answer=\(testAns)&quest=\(testQuest)"
print(postString)
print(testAns,testQuest)
request.httpBody = postString.data(using: String.Encoding.utf8);
let task = URLSession.shared.dataTask(with: request) { (data: Data?, response: URLResponse?, error: Error?) in
    if error != nil
    {
        print("error=\(String(describing: error))")
        return
    }
    do {
        _ = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary
    }
    catch {
        print(error)
    }

}
task.resume()
    }

3 个答案:

答案 0 :(得分:1)

我不知道如何在服务器端编码该数组。 但暂时你可以尝试这种方式并检查你的数据库。

let postString = "uID=97B436E41&idUser=\(userID!)&art_id=\(artID!)&answer[0]=131&answer[1]=123&quest[0]=123&quest[1]=233"

答案 1 :(得分:0)

您可以使用此时非常受欢迎的Alamofire AFNetworking的高级版本 此外,我正在共享帮助您点击API的方法,您必须只传递此方法中的字典对象,这将为您提供两个块的响应,您可以根据需要使用它们。

1:无法访问()

2:handler(responseDict)

//MARK: *********** HIT POST SERVICE IN JSON FORM***********
    func hitPostServiceJsonForm(_ params:Dictionary<String,Any>,unReachable:(() -> Void),handler:@escaping ((Dictionary<String,Any>?) -> Void)) {
        if networkReachable() == false {
            unReachable()
        }
        let BASE_URL = "http://mydoamain"
        var request = URLRequest(url: URL(string: BASE_URL)!)
        request.httpMethod = "POST"
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = try! JSONSerialization.data(withJSONObject: params, options: .prettyPrinted)

        print(BASE_URL)
        Alamofire.request(request).responseJSON { response in
            //print("Request: \(String(describing: response.request))")   // original url request
            //print("Response: \(String(describing: response.response))") // http url response
            print("Result: \(response.result)")                         // response serialization result
            switch response.result {
            case .success:
                if let jsonDict = response.result.value as? Dictionary<String,Any> {
                    print("Json Response: \(jsonDict)") // serialized json response
                    handler(jsonDict)
                }
                else{
                    handler(nil)
                }
                if let data = response.data, let utf8Text = String(data: data, encoding: .utf8) {
                    print("Server Response: \(utf8Text)") // original server data as UTF8 string
                }
                break
            case .failure(let error):
                handler(nil)
                print(error)
                break
            }
        }
    }



func networkReachable() -> Bool {
     return (NetworkReachabilityManager()?.isReachable)!
}

答案 2 :(得分:0)

将您的数组转换为json字符串,然后尝试将其发送到服务器

func post_array(){

    let userID = UserDefaults.standard.string(forKey: "userID")
    let artID = UserDefaults.standard.string(forKey: "index")
    let myUrl = URL(string: "http://www.someurls.kz/modules/CheckTestF.php");
    var request = URLRequest(url:myUrl!)
    request.httpMethod = "POST"
    var testAns = [Int]()
    var testQuest = [Int]()
    testAns = [131,123,23]
    testQuest = [123,233,232]

    var tempAns : NSString = ""
    do {
        let arrJson = try JSONSerialization.data(withJSONObject: testAns, options: .prettyPrinted)
        let string = NSString(data: arrJson, encoding: String.Encoding.utf8.rawValue)
        tempAns = string! as NSString
    }catch let error as NSError{
        print(error)
    }

    var tempQuest : NSString = ""
    do {
        let arrJson = try JSONSerialization.data(withJSONObject: testQuest, options: .prettyPrinted)
        let string = NSString(data: arrJson, encoding: String.Encoding.utf8.rawValue)
        tempQuest = string! as NSString
    }catch let error as NSError{
        print(error)
    }
    let postString = "uID=97B436E41&idUser=\(userID!)&art_id=\(artID!)&answer=\(tempAns)&quest=\(tempQuest)"
    print(postString)
    print(testAns,testQuest)
    request.httpBody = postString.data(using: String.Encoding.utf8);
    let task = URLSession.shared.dataTask(with: request) { (data: Data?, response: URLResponse?, error: Error?) in
        if error != nil
        {
            print("error=\(String(describing: error))")
            return
        }
        do {
            _ = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary
        }
        catch {
            print(error)
        }

    }
    task.resume()
}