responseJSON 没有响应

Posted

技术标签:

【中文标题】responseJSON 没有响应【英文标题】:responseJSON getting no response 【发布时间】:2016-06-21 19:08:30 【问题描述】:

我正在使用 Alamofire 尝试使用 image shack API 将图像放在图像小屋服务器上。我没有收到回复并收到错误消息:

失败:错误域=NSCocoaErrorDomain 代码=3840“无效值 在字符 0 附近。

我也在代码中突出显示了错误所指的位置:

        let imageName = "pano.jpg"
        let postImage = UIImage(named: imageName)
        let urlStr = "https://post.imageshack.us/upload_api.php"
        let theUrl:NSString = urlStr.stringByRemovingPercentEncoding!
        let url = NSURL(string: theUrl as String)!
        let imgData = UIImageJPEGRepresentation(postImage!, 0.2)!
        let keyData = "0345CHKMad115dd32980b363be5f2d34731b8110".dataUsingEncoding(NSUTF8StringEncoding)!
        let keyJSON = "json".dataUsingEncoding(NSUTF8StringEncoding)!


Alamofire.upload(.POST, url, multipartFormData:  MultipartFormData in

                MultipartFormData.appendBodyPart(data: imgData, name: "fileupload", mimeType: "image/jpg")
                MultipartFormData.appendBodyPart(data: keyData, name: "key")
                MultipartFormData.appendBodyPart(data: keyJSON, name: "format")

            ) encodingResult in

                switch encodingResult 
                case .Success(let upload, _, _):
                    upload.responseJSON(completionHandler:  response in

                        print(response) //ERROR HERE
                        guard let data = response.result.value
                            else
                                print("Request failed with error data)")

                            return
                        

                        if let info = data as? Dictionary<String, AnyObject> 
                            if let links = info["links"] as? Dictionary<String, AnyObject> 
                                if let imgLink = links["image_link"] as? String 
                                    print(imgLink)
                                
                            
                        
                    )

我完全迷失了这个问题意味着任何帮助都会很棒。

【问题讨论】:

错误消息只是表明它不是有效的 JSON。 谢谢,虽然如果我将 'responseJSON' 更改为 'responseString' 我会回复:抱歉,但我们检测到收到了意外数据。缺少必需的参数“fileupload”或您的帖子不是 multipart/form-data 你能帮忙吗?我不确定这是为什么 我根本不熟悉 Alamofire,我只是在解释错误消息。我想这取决于服务器实际返回的内容。 【参考方案1】:

在将 url 传递给函数之前试试这个:

//Convert the NSURL to a NSString
let urlString:NSString = url.absoluteString() as! NSString

//Remove Percent Encoding
let theUrl:NSString = urlString.stringByRemovingPercentEncoding()

//Place Back into NSURL
let newUrl = NSURL(string:theUrl)

并传递newUrl 而不是url。最好在实例化原始 url 之前执行此操作,但请尝试这样做,看看是否有帮助。

编辑

在你遇到问题的地方也试试这个:

var jsonError:NSError?
let json = NSJSONSerialization.JSONObjectWithData(response, options: nil, error: &jsonError) as NSDictionary 

    print(json)

【讨论】:

谢谢,虽然我收到错误:“NSURL”类型的值没有成员“stringByRemovingPercentEncoding” String 确实有那个方法 谢谢,它确实有那个方法,但仍然是同样的问题和错误,还有什么?我也更新了我的代码 我更新了我的答案。您期望得到什么回应? 抱歉,我有点困惑,您添加的新位是要放在哪里?我正在尝试打印“打印(imgLink)”。【参考方案2】:
   switch encodingResult 
                    case .Success(let upload, _,_):
                        upload.responseJSON(completionHandler: response in

                            if let data = response.result.value as? Dictionary<String, AnyObject>

                                if let links = data["links"] as? Dictionary<String, AnyObject> 
                                    if let imgLink = links["image_link"] as? String 
                                        print(imgLink)
                                    
                                
                            


                        )
                    case .Failure(let error):
                        print(error)
                    

【讨论】:

以上是关于responseJSON 没有响应的主要内容,如果未能解决你的问题,请参考以下文章

将 responseJSON 解析为 ObjectMapper

从postman中以xml格式呈现的响应中提取数据

AlamoFire:如何获取 responseJSON 值

尝试全局访问响应

使用 SwiftyJSON 处理 JSON 响应

将 alamofire 响应解析为 JSON 返回 nil