首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >无法在Swift应用程序上解析服务器PHP

无法在Swift应用程序上解析服务器PHP
EN

Stack Overflow用户
提问于 2016-03-29 11:43:00
回答 1查看 299关注 0票数 2

我正试图在我的iOS应用程序上实现Signup/Login函数。为此,我编写了一个简单的服务器端php脚本,只是为了检查它是否返回一个值。以下是我的php代码:

代码语言:javascript
代码运行次数:0
运行
复制
<?php

if(isset($_POST["username"])){
$username = $_POST["username"];
$password = $_POST["password"];
if($username == "admin" && $password == "admin")
{
$details;
$details['success'] = $username;
echo json_encode($details);
}
else{
echo "invalid credential";
}
};
?>

以下是登录屏幕中的代码:

代码语言:javascript
代码运行次数:0
运行
复制
let myUrl = NSURL(string: "http://localhost/app/index.php")  
    let request = NSMutableURLRequest(URL:myUrl!)
    request.HTTPMethod = "POST" 
    request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
    request.addValue("application/json", forHTTPHeaderField: "Accept") 
    //print("\(usernameField.text!), \(passwordField.text!), \(emailField.text!)")  
    //let params = ["user":"\(usernameField.text!)","pass":"\(passwordField.text!)"] as NSDictionary  
    let bodyData = "username=\(usernameField.text)&password=\(passwordField.text)"  
    request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding)

    let task = NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: {
            data, response, error in
            do {
                let json = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary
                print("json is : \(json!)")
                if let parseJSON = json {
                    let firstNameValue = parseJSON["success"] as? String
                    print("Username: \(firstNameValue!)")
                }
            } catch {
                print("errorrrrr: \(error)")
            }  
            if error != nil {
                print("error=\(error!)")
                return
            }        
            // You can print out response object
            print("Response = \(response!)")
            // Print out reponse body
            let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
            print("response Data = \(responseString!)")


        })
        task.resume()

}

但是,我得到了以下错误:

代码语言:javascript
代码运行次数:0
运行
复制
Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo={NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}

我的响应数据是“无效凭据”

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-29 12:49:09

您的php脚本对于webservice没有完成。这不是送回一个json。你必须先完成你的网络服务。我不是个php的家伙。但我还是试图改进剧本:

代码语言:javascript
代码运行次数:0
运行
复制
<?php
if(isset($_POST["username"])){
$username = $_POST["username"];
$password = $_POST["password"];
if($username == "admin" && $password == "admin")
{
    $details;
    $details['success'] = $username;
    return json_encode($details);
}
else{
    return json_encode( array("response" => "invalid credential") );
}
};
?>

更新:在使用alamofire库之后,使用下面的代码访问webservice:

代码语言:javascript
代码运行次数:0
运行
复制
let parameters = ["username": usernameField.text! ,"password" : passwordField.text! ]

Alamofire.request(.POST, "http://localhost/app/index.php", parameters: parameters)
     .responseString { response in
         print("Response String: \(response.result.value)")
     }
     .responseJSON { response in
         print("Response JSON: \(response.result.value)")
       //Handle the json response here
      if let parseJSON = response.result.value {
                let firstNameValue = parseJSON["success"] as? String
                print("Username: \(firstNameValue!)")
            }
     }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36283310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档