当我使用Swift迁移到iOS 9上的Alamofire 3时,我以前工作的POST调用服务器停止工作并被解释为GET调用。
我已将压缩的东西压缩到一个显示问题的非常小的测试用例中。 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;
}
我看到帖子是a GoDaddy problem,但我在计算机上使用了本地主机。我也曾尝试change the content-type to urlencoded基于另一篇文章,但这不起作用(所以我为了清楚起见省略了代码)。
我不知道该尝试什么。非常感谢任何帮助!