Мои ранее работающие POST-вызовы на сервере перестали работать и интерпретируются как GET-вызовы, когда я перешел на Alamofire 3 на iOS 9 с Swift.
Я сжал вещи в довольно маленький тестовый пример, который показывает проблему. PHP просто распечатывает полученные параметры:
$type = "NONE";
if (isset($_POST['a'])) {
$a = $_POST['a'];
$type = "POST";
} else {
$a = $_GET['a'];
$type = "GET";
}
$result = array("a" => $a, "b" => "something", "t" => $type);
echo(json_encode($result));
Клиентский код Swift отвечает на действия кнопок для вызовов GET и POST:
@IBAction func localGet(sender: AnyObject) {
print("Local Get")
let postsEndpoint : String = "http://localhost/~paris/small.php?a=getting"Alamofire.request(.GET, postsEndpoint, parameters : nil, encoding : .JSON)
.responseJSON { response in
guard response.result.error == nil else {
print("error calling localhost GET")
return
}
if let JSON = response.result.value {
print("JSON: \(JSON)")
}
}
}@IBAction func localPost(sender: AnyObject) {
print("Local Post")
let postsEndpoint : String = "http://localhost/~paris/small.php"let newPost = ["title" : "First Post", "body" : "I is first", " userId" : 1, "a" : "posting"]
Alamofire.request(.POST, postsEndpoint, parameters : newPost, encoding : .JSON)
.responseJSON { response in
guard response.result.error == nil else {
print("error calling localhost POST")
return
}
if let JSON = response.result.value {
print("JSON: \(JSON)")
}
}
}
Вот некоторые выходные данные из кода, которые показывают, как в обоих случаях рассматривается как GET, и поэтому попытка POST теряет передаваемый параметр:
Local Get
JSON: {
a = getting;
b = something;
t = GET;
}
Local Post
JSON: {
a = "<null>";
b = something;
t = GET;
}
Я видел сообщение, что это было проблема GoDaddy но я использую локальный хост на моем компьютере. Я также пытался изменить тип контента на urlencoded на основе другого поста, но это не сработало (поэтому я опустил код здесь для ясности).
Я в растерянности относительно того, что попробовать. Любая помощь очень ценится!
Задача ещё не решена.
Других решений пока нет …