【发布时间】:2018-02-11 00:52:38
【问题描述】:
我想在请求中发送两个值:
1) 操作字符串
2) 用户对象
我收到消息Operation is not set,即使我包含在参数"operation": "register"中
我是 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 ...
}
【问题讨论】:
-
你如何解析“用户”。看起来您正在尝试将 User 作为 Swift 对象发送。您可以先通过 REST 客户端测试您的 api,例如邮递员
-
@RikeshSubedi API 在检查用户之前返回响应。它首先检查操作然后返回
"Operation is not set"而不读取用户。所以用户不是这里的问题 - 至少现在 -
@JumanaAlhaddad 1. 我认为您的 api 有问题 - 请使用邮递员测试您的 api,正文为
{"operation": "register"}2. 您需要将User对象转换为字典 -
@AdrianBobrowski 我已经测试了 API,它运行良好!查看我的更新