gpt4 book ai didi

ios - 为什么使用 POST 参数的这个成功的 Swift 异步调用没有返回预期的内容

转载 作者:行者123 更新时间:2023-11-29 00:53:32 25 4
gpt4 key购买 nike

我研究了很多关于在 swift 中使用 post 参数进行异步调用,最后我成功地完成了一个但是现在,当我解析 json 时它抛出一个错误,因为我的 json 解析函数无法解析响应数据并返回 nil 而不是 json 对象。

我设置了断点并检查了变量,值没问题,异步调用似乎成功了,但是返回数据有 php 错误,我很确定错误“故障”不是来自服务器因为我模拟了相同的调用,具有相同的参数和 url 形式 hulr.it并且返回数据是 json token ,仅此而已。

这是返回的数据:

enter image description here

这是返回的详细数据,带有 token 作为用户已注册且调用正常的证明: enter image description here

这是我的异步调用的代码:

      private func callWithCompletionHandler(completed : completionAsyncCall){
asyncJson.removeAllObjects()

//Set async call params
let request = NSMutableURLRequest(URL: NSURL(string: self.url!)!)
request.HTTPMethod = "POST"
let trimmedPostParam : String = self.paramString!.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

request.HTTPBody = trimmedPostParam.dataUsingEncoding(NSUTF8StringEncoding)

let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in
guard error == nil && data != nil else {
// check for fundamental networking error
print("error=\(error)")
return
}
if let httpStatus = response as? NSHTTPURLResponse where httpStatus.statusCode != 200 {
// check for http errors
print("statusCode should be 200, but is \(httpStatus.statusCode)")
print("response = \(response)")
}

let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)

// asyncJson = responseString!.parseJSONString! as! NSMutableArray

let result : AnyObject = responseString!.parseJSONString!

if let nsMutableResult = result as? NSMutableArray{
print("NSMutableArray")
}
if let nsDictResult = result as? NSMutableDictionary{
self.parseMutableDictionary(nsDictResult)
}


self.flag = true // true if download succeed,false otherwise
completed(success: flagAsyncCall!)
}
task.resume()
}

我绝对需要 json 数据作为返回。有人知道我在这里做错了什么吗?

最佳答案

我严重建议不要编写自己的网络代码,它很丑陋并且容易出现愚蠢的错误。使用 Alamofire 代替。返回的错误是服务器错误(顺便说一句,如果出现错误,服务不应该返回怪异的 html,它应该返回带有失败原因的 json 或类似的内容)无论如何,这可能是因为您发送了错误的请求而发生的。另外,如果您使用 JSON 作为 POST 正文,则应该发送如下内容:

let parameter: NSDictionary = ["firstParam": firstValue, "secondParam": secondValue]
let dataContainer = try! NSJSONSerialization.dataWithJSONObject(parameter, options: NSJSONWritingOptions() )

request.HTTPBody = dataContainer

不是修剪过的字符串。

关于ios - 为什么使用 POST 参数的这个成功的 Swift 异步调用没有返回预期的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37857155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com