Alamofire 无法使用 php 获取请求

Posted

技术标签:

【中文标题】Alamofire 无法使用 php 获取请求【英文标题】:Alamofire can't get request with php 【发布时间】:2017-07-25 10:34:38 【问题描述】:

我有这个 Swift 4 代码

let par: Parameters = [
                          "usn":"Murad",
                          "Password":"monkey"
                      ]
Alamofire.request("http://www.web.com/ajax/logreg.php",method: .post,parameters:par,encoding: URLEncoding.httpBody).response  response in

    if let data = response.data, let utf8Text = String(data: data, encoding: .utf8) 
       print("Data: \(utf8Text)")
   

还有这个 PHP 代码

print_r($_POST);

现在我想这段代码会打印出来

Array(
   "usn":"Murad",
   "Password":"monkey",    
)

但它会打印

Array
(
    [(componentTuple_0)] => (componentTuple.1)
)

【问题讨论】:

更改编码试试? 看起来像 JSON,你确定你的 API 没有返回 JSON? @DávidPásztor Json encoding 给了我这个错误fAILURE: responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo=NSDebugDescription=Invalid value around character 0.)) [Timeline]: Timeline: "Request Start Time": 522672231.598, "Initial Response Time": 522672231.719, "Request Completed Time": 522672231.720, ... JSON 请求无法接收到$_POST。如果你想让你的 Swift 代码正常工作,你可能需要更新你的 PHP 代码。 @OOPer 但在文档中 github.com/Alamofire/Alamofire 它说你应该像我一样发送帖子。 【参考方案1】:

试试这个代码

   let par: Parameters = [
                "usn":"Murad",
                "Password":"monkey"
            ]


   Alamofire.request("http://www.web.com/ajax/logreg.php", method: .post, parameters: par as? [String : AnyObject], encoding: JSONEncoding.default).responseJSON  response in
            switch response.result 
            case .success(let JSON):
                //                    print("Success with JSON: \(JSON)")
                if let response = JSON as? NSMutableDictionary
        
            callback(response,nil)
        
        else if let response = JSON2 as? NSDictionary
        
            callback(response,nil)
        
        else if JSON2 is NSArray
        


        
        else if ((JSON as? String) != nil)
        

            let userDic : [String : String] = ["quatid":JSON as! String]
            print(userDic)
            callback(userDic as NSDictionary?,nil)

    

                break

            case .failure(let error):
                print("Request failed with error: \(error)")
                callback(response.result.value as? NSMutableDictionary,error as NSError?)
                break
            
            
            .responseString  response in
                print("Response String: \(response.result.value)")
        

【讨论】:

什么是回调? 在回调中使条件得到 json ,数组或字符串,然后您可以填充并在此代码中字典回调得到【参考方案2】:

您正在使用密钥对数组,因此使用.prettyPrinted 格式。 希望这个sn-p会有所帮助

     var arrayOfKeyPairs = [[String:Any]]()
     let JSON = try? JSONSerialization.data(withJSONObject: arrayOfKeyPairs, options: [.prettyPrinted])
     let jsonPrasatation = String(data: JSON!, encoding: .utf8)

【讨论】:

以上是关于Alamofire 无法使用 php 获取请求的主要内容,如果未能解决你的问题,请参考以下文章

Alamofire 4 重试器和适配器无法看到更改的 accessToken

Swift - 无法获取 Alamofire.request

我无法使用 Alamofire 提出样品请求

获取新 Alamofire Swift 3 的请求

无法通过使用 Alamofire 的参数的 GET 请求成功

POST 请求在 swift3 中无法使用 alamofire