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

问题描述:

我想将数组作为参数发送到服务器,但服务器没有收到。服务器必须接收两个我正在发送的数组。但在服务器中,他们不会出现?我不知道是我在服务器上的错误还是错误? 我的数组名称是testAns和testQuest,我必须将它发送给参数:answer和quest。 我的代码:如何通过POST方法向服务器发送数组?

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() 
    } 
+0

多参考。 – Ragul

+0

@Ragul我已编辑请帮助,如果你知道,如果有什么不明白让我知道 –

+0

看看我的答案,让我知道如果你有任何进一步的援助。 –

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

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

你需要序列化答案数组,然后追加到postString。 – Hitesh

+0

它是服务器端的php数组。这种方式需要像这样发送。 – Hitesh

可以使用Alamofire这是非常流行的,在这个时候,是AFNetworking 还拥有先进的版本,我分享,这将有助于你打API的方法,你只能通过这个方法中的字典对象将会给你两个块的响应,你可以根据需要使用它们。

1:可达()

2:处理器(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)! 
} 

在你的数组转换成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() 
} 
+0

VAR tempAns:的NSString = “” 做{ 让arrJson =尝试JSONSerialization.data(withJSONObject:testAns,选择:.prettyPrinted) 令字符串=的NSString(数据:arrJson,编码:String.Encoding.utf8.rawValue) tempAns = string! as NSString } catch let error as NSError { print(error) } – user3318684