0
我通過Alamofire向我的API發送POST請求時發生問題,GET工作沒有問題,但是每當我檢查響應時進行POST,我就會得到最後一次GET的結果。Alamofire響應不匹配請求
import Alamofire
import SwiftyJSON
class NetworkManager {
static let sharedInstace = NetworkManager()
let defaultManager: Alamofire.Manager = {
let serverTrustPolicies: [String: ServerTrustPolicy] = [
"homestead.app": .DisableEvaluation
]
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.HTTPAdditionalHeaders = Alamofire.Manager.defaultHTTPHeaders
return Alamofire.Manager(
configuration: configuration,
serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies)
)
}()
}
internal class ApiHelper {
/**
Get data from a target URL and return JSON data to be parsed
- parameter targetURL: URL to pull data from
- parameter success: return data to the calling function
- parameter failure: return an error message to the calling function
*/
private func getDataFromAPI(targetURL: String, success:(JSONData: JSON) ->(), failure:(message: String) ->()) {
NetworkManager.sharedInstace.defaultManager.request(.GET, targetURL).responseJSON { response in
print(response.result)
switch response.result {
case .Success:
if let jsonRaw = response.result.value {
let json = JSON(jsonRaw)
success(JSONData: json)
}
case .Failure(let error):
print(error.localizedDescription)
failure(message: error.localizedDescription)
}
}
}
/**
Post data to the target URL and return errors as JSON data to be parsed
- parameter targetURL: URL to post to
- parameter parameters: JSON data to post
- parameter success: return success message to the calling function
- parameter failure: return JSON data to the calling function with server error
*/
private func postDataToAPI(targetURL: String, parameters: [String : AnyObject], success:() ->(), failure:(JSONData: JSON) ->()) {
NetworkManager.sharedInstace.defaultManager.request(.POST, targetURL, parameters: parameters, encoding: .JSON).responseJSON { response in
debugPrint(response)
success()
}
}
/**
Post an updated profile to the API
- parameter parameters: JSON data to be posted
- parameter success: success callback
- parameter failure: JSON data of serverError
*/
internal func postUpdateRequest(parameters: [String : AnyObject], success:() ->(), failure:(JSONData: JSON) ->()) {
let url = "https://homestead.app/profile/a/update"
postDataToAPI(url, parameters: parameters, success: {
success()
}, failure: { JSONData in
failure(JSONData: JSONData)
})
}
/**
Get all states from the API
- parameter success: JSON data of all states
- parameter failure: failure message
*/
internal func getAllStates(success:(JSONData: JSON) ->(), failure:(message: String) ->()) {
let url = "https://homestead.app/api/state/all"
getDataFromAPI(url, success:
{ JSONData in
success(JSONData: JSONData)
}, failure: { message in
failure(message: message)
})
}
}
let api = ApiHelper()
api.getAllStates({ JSONdata in
print(JSONdata)
let params: [String : AnyObject] = ["name" : "Bob"]
api.postUpdateRequest(params, success: { JSONdata in
print("Success")
}, failure: { message in
print("Message")
})
}, failure: { message in
print(message)
})
我的代碼首先獲取狀態列表,然後發佈更新的用戶配置文件。我的問題是,當我得到該更新的用戶配置文件的響應時,它包含了早前已完成的GET請求的響應。 POST通過並且在Web服務中進行了更改,但我的響應對象中沒有任何跡象。
我已確認作出POST請求時,服務器不會返回狀態的列表,它會從瀏覽器中手動調用時返回如下:
{
"success": "Changes saved!"
}
我在一個虧損爲什麼我收到來自我的POST早期請求的響應。有什麼想法嗎?