簡體   English   中英

在Alamofire中快速發送參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM