我在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”]
我做错了什么?
感谢。
编辑:
仍然为此疯狂。安装了查尔斯,检查我的电脑发出的请求是什么,然后就是这样:
编辑2:
将Alamofire请求编码更改为JSON:
Alamofire.request(.POST, url, parameters: parameters!, encoding: ParameterEncoding.JSON )
现在我可以看到GET和POST请求。邮政要求:
网址http://example.com/backend/names/query_names.php 状态完成响应代码301永久移动
答案 0 :(得分:1)
终于找到了问题所在。
我的请求网址已设为http://server.com/api
当我将其更改为http://www.server.com/api
这让它运转了。我不知道为什么会发生这种情况,如果这与.httpaccess有关,那就是它。