【问题标题】:Alamofire Invalid value around character 0 in laravel在laravel中字符0周围的Alamofire无效值
【发布时间】:2018-12-07 04:31:12
【问题描述】:

我使用 alamofire 将发布数据发送到服务器,但它无法发送到我的服务器我使用 laravel 获取用户数据 这是我的代码

viewController

Alamofire.request("mysite/api/user",method:.post,parameters:["uids":uids],encoding: JSONEncoding.default).responseJSON { response in
            switch response.result {
            case .success:
                print(response)

                break
            case .failure(let error):

                print(error)
            }

}

在php服务器中

public function seeUser(Request $request) {

    $uid = $request->input('uids');
    //...... and get to model table to query
return response()->json([
      'status' => 'user'
]);
}

并且日志响应错误是

responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(Error Domain=NSCocoaErrorDomain Code=3840 "字符 0 周围的值无效。" UserInfo={NSDebugDescription=字符 0 周围的值无效。}))

【问题讨论】:

  • 听 response.error 看看它说了什么。
  • 回复是responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.}))
  • 好的。搜索引擎会告诉你什么?

标签: ios swift laravel alamofire


【解决方案1】:

服务器无法提供有效的 JSON 对象作为响应。要获得服务器的响应,您可以使用Postman 或其他一些网络工具。使用 Alamofire,您还可以获取服务器正在响应的整个字符串,使用以下代码行:

Alamofire.request("mysite/api/user",method:.post,parameters:["uids":uids],encoding: JSONEncoding.default).responseString { response in
    print("Response String: \(response)")
}

希望这会有所帮助!

【讨论】:

  • @YasuhiroKondo 如果 responseString 给你一个 HTML 字符串,那么请从 Postman 中点击这个 API 并预览错误。返回响应时,后端逻辑肯定存在一些问题。
【解决方案2】:

它清楚地表明网络服务有问题。 API 没有响应有效的 JSON。 在 Postman 中点击 API 并查看 JSON 和 HTML 格式的响应

【讨论】:

    【解决方案3】:

    这确实意味着你的 JSON 不正确。

    尝试以字符串形式响应并检查它

    Alamofire.request("mysite/api/user",method:.post,parameters:["uids":uids],encoding: JSONEncoding.default).responseString { response in
                switch response.result {
                case .success:
                    print(response)
                    break
                case .failure(let error):
                    print(error)
                }
    }
    

    【讨论】:

    • @YasuhiroKondo 你试过响应为字符串(.responseString)吗?
    • @YasuhiroKondo 你的服务器响应什么(.responseString)?当您作为字符串响应时,Alamafire 不会序列化数据,您将打印纯字符串并检查其正确性。
    • 如果使用 responseString,服务器响应我主页的 HTML 代码
    • @YasuhiroKondo 可能是不正确的请求(端点、参数等)或服务器端问题。尝试使用 Postman 测试您的 API,为什么它是 HTML 而不是 JSON。
    • @YasuhiroKondo 尝试更改编码:URLEncoding.httpBody 如果有帮助,请告诉我。
    猜你喜欢
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 2016-09-19
    相关资源
    最近更新 更多