Alamofire打印“由于错误,JSON无法序列化:”

时间:2017-12-01 08:39:01

标签: php ios swift3 alamofire xcode9.1

我正在尝试使用某些参数发布请求,但在提出请求时Alamofire会打印以下错误:

  

由于错误,无法序列化JSON:   无法读取数据,因为格式不正确。

以下是我正在尝试运行的代码:

var parameters: [String: Any] = [:]
parameters[UserParameters.kUserId.rawValue] = self.userInfoForMe.user_id
parameters[UserParameters.kGender.rawValue] = self.userInfoForMe.gender
parameters[UserParameters.kfull_name.rawValue] = self.userInfoForMe.full_name
parameters[UserParameters.kDOB.rawValue] = self.userInfoForMe.dob  

print("parameters:\(parameters)")
let userInfoDataHandler:UserInfoDataHandler = UserInfoDataHandler()
var DataJSON : JSON = JSON.null
userInfoDataHandler.postData(parameters: parameters){
    responseObject, error in
    if responseObject != nil{
        DataJSON = JSON(responseObject!)
       print(DataJSON) 
    }
    else{
        self.removeLoader(showNewController: false)
        self.showAlertWithMessage(msg: ErrorContants.somethingWentWrongError)
    }
}

这是我的UserDataInfoHandler:

class UserInfoDataHandler: BaseService {
init(){
    super.init(controller: Controllers.mobile_pa, apiName: ApiNames.save_user_info)
}

}

以下是我从Base Service调用的代码:

fileprivate func fetchData(method:String, endpoint:String,parameters: [String: Any],completionHandler: @escaping (NSDictionary?, Error?) -> ()){

    //need to show loader here..

    var request: DataRequest? = nil
    let requestURL : String = URLConstants.baseURL + self.controller + "/" + self.apiName
    switch method {
    case RequestMethod.GET.rawValue:
        request = Alamofire.request(requestURL, method: HTTPMethod.get, parameters: parameters)

    case RequestMethod.POST.rawValue:
        request = Alamofire.request(requestURL, method: HTTPMethod.post, parameters: parameters)

    default:
        print(ErrorContants.WentThroughSwitchCaseOf + "Base Service");
    }

    request?.responseJSON(completionHandler: { (response) in
//this block never gets executed as it throws error that JSON is not serialized.
            self.checkForResponseAndError(response: response, completionHandler: completionHandler)
        })
}

打印参数后,以下是输出

parameters:[ "full_name": "fatin", "user_id": "42", "dob": "06-12-1994", "gender": "1"]

更新:我尝试使用相同的代码处理其他发布请求和参数,它们工作正常。所以我开始知道我发送的参数存在问题,但仍然无法弄清楚出了什么问题。

2 个答案:

答案 0 :(得分:3)

经过几个小时的思考并与我的团队讨论后,我发现我的代码没有任何错误。问题是,服务器端有一些验证,因为这是一个PHP错误响应,alamofire无法处理(因为alamofire只能处理JSON响应)。请在Postman中找到错误的附加屏幕截图。enter image description here 所以实际的问题是来自服务器的响应,这是post请求中的 PHP Error 。现在我得到了适当的回应,因为现在没有问题。 希望有人会发现这有用。

答案 1 :(得分:0)

使用 responseString 代替使用 responseJSON 。它对我有用。

responseString(completionHandler: { (response) in
     //this block never gets executed as it throws error that JSON is not serialized.
     self.checkForResponseAndError(response: response, completionHandler: completionHandler)
})