【发布时间】:2016-09-06 09:11:27
【问题描述】:
我在 iOS 9 中使用 Alamofire,我注意到 Alamofire 没有通过 POST 方法将参数发送到我的 PHP 脚本。
这是 PHP 脚本:
if($_SERVER['REQUEST_METHOD'] != 'POST') {
echo '{"status": "error", "message" : "Only POST supported. You sent: '.$_SERVER['REQUEST_METHOD'].'"}';
return;
}
if (!isset($_POST['GENDER']) || !isset( $_POST['CHAR_COUNT_LOWER'] ) || !isset( $_POST['CHAR_COUNT_UPPER'] )) {
echo '{"status": "error", "message" : "Minimum parameters not set."}';
return;
}
然后,当触发我的 Alamofire POST 请求时,我收到消息:
swift:55 fetchData(_:completionHandler:):仅 支持 POST。您发送:GET
最后,这是我的 Alamofire 请求:
Alamofire.request(.POST, url, parameters: ["CHAR_COUNT_LOWER":String(lowerValue), "CHAR_COUNT_UPPER":String(upperValue), "GENDER": String(gender!)] )
.validate()
.responseJSON { response in
QL1(response.description)
switch response.result {
case .Success:
var result = [BabyNames]()
let json = JSON(data: response.data!)
if json["status"] == "error" {
QL4(json["message"])
completionHandler(babyNames: [], error: StoreError.CannotFetch("Could not retrieve baby names"))
return
}
.......
我还尝试将编码更改为除 JSON 之外的所有其他内容,因为我的服务不将 JSON 作为输入。 这是一个读取 $_POST["param"]
的简单服务我做错了什么?
谢谢。
编辑:
仍然为之疯狂。安装 Charles 来检查我的 PC 发出的请求是什么,结果如下:
编辑 2:
将 Alamofire 请求编码更改为 JSON:
Alamofire.request(.POST, url, parameters: parameters!, encoding: ParameterEncoding.JSON )
现在我可以看到一个 GET 和一个 POST 请求。 Post 请求:
网址http://example.com/backend/names/query_names.php 状态完成响应代码 301 已永久移动
【问题讨论】:
-
另一个评论是我注释掉了对 REQUEST_METHOD 的检查,然后它在第二个条件下失败,检查 _POST 参数的存在。这当然是意料之中的。我认为 Alamofire 也将我的参数发送为 _GET