[英]Swift send parameters in Alamofire
我想在請求中發送兩個值:
1)操作字符串
2)用戶對象
我收到消息即使我包含在參數"operation": "register"
Operation is not set
我是Alamofire的新手。 誰能向我解釋:
1)如何在請求中發送值?
2)如何發送用戶對象?
3)如何處理兩個結果.Success
和.Failure
SWIFT代碼:
let urlString = URLFactory()
let url = URL(string: urlString.getAppURL())!
print("Log url: \(url)")
let user = User()
user.setEmail(email: email)
let parameters: Parameters = ["operation": "register", "user": user]
Alamofire.request(url, method: .post, parameters: parameters).responseJSON { response in
print("Log \(response)")
print("Log response.request: \(response.request)")
print("Log response.error: \(response.error)")
print("Log response.data: \(response.data)")
print("Log response.result: \(response.result)")
}
快速輸出:
Log url: http://192.168.0.101/GeolocationNews/NewsDataCrawler/app.php
Log SUCCESS: {
message = "Invalid Parameters";
result = failure;
}
Log response.request: Optional(http://192.168.0.101/GeolocationNews/NewsDataCrawler/app.php)
Log response.error: nil
Log response.data: Optional(51 bytes)
Log response.result: SUCCESS
PHP代碼:
$login = new Login();
$fun = new FunctionsValidation();
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$data = json_decode(file_get_contents("php://input"));
if(isset($data->operation)) {
$operation = $data->operation;
if(!empty($operation)) {
if($operation == 'register') {
echo $login->register($data);
}
} else { // if operation is empty
$response["result"] = "failure";
$response["message"] = "Operation is empty";
echo json_encode($response);
}
} else { // if operation is not set
$response["result"] = "failure";
$response["message"] = "Operation is not set";
echo json_encode($response);
}
}
更新
我已經通過Postman發送來測試了API:
{
"operation": "register",
"user":
{
"email": "email value"
}
}
它給了我: {"result":"failure","message":"Invalid Email"}
因此API運行良好!
我嘗試通過參數中的僅操作發送Alamofire請求,它可以正常工作。 看來問題出在將用戶對象轉換成字典。 誰能給我一個例子,怎么做?
用戶對象:
class User: NSObject {
private var name: String,
email: String,
password: String,
oldPassword: String,
newPassword: String,
code: String
private var id: Int
override init() {
self.name = ""
self.email = ""
self.password = ""
self.oldPassword = ""
self.newPassword = ""
self.code = ""
self.id = 0
}
// set and get methods ...
}
我認為問題在於編碼。 根據您的PHP代碼,它接受application/json
作為內容類型,並且應使用JSON編碼通過Almofire發送。
嘗試以下方法:
Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default)
.responseJSON { response in
print("Log \(response)")
print("Log response.request: \(response.request)")
print("Log response.error: \(response.error)")
print("Log response.data: \(response.data)")
print("Log response.result: \(response.result)")
}
參考: https : //github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#parameter-encoding
問題在於將用戶對象轉換為字典。 不用使用對象,我只是將用戶設置為字典。
let userDictionary: Dictionary = ["email": email, "password": password]
let parameters: Parameters = ["operation": operation, "user": userDictionary]
Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseJSON { response in
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.