2016-07-15 11 views
0

我开发一个简单的iOSSwift应用。我想为我的应用程序创建一个登录屏幕,该屏幕将连接到Wordpress中已有的用户数据库。我发现了一些PHP脚本和Swift代码。无效JSON需要斯威夫特的iOS

我尝试后的用户名和密码,检查,并返回结果(isUser =真/假或1/0)

这里是一个PHP脚本

<?php 
// Read request parameters 
$username= $_REQUEST["username"]; 
$password = $_REQUEST["password"]; 
// Store values in an array 
$returnValue = array("username"=>$username, "password"=>$password); 
// Send back request in JSON format 
echo json_encode($returnValue); 
?> 

和斯威夫特功能

func getPHPJson() { 

    let urlPath: String = "LINK_TO_PHP_FILE?username=\(user)&password=\(pass)" 
    let url: NSURL = NSURL(string: urlPath)! 
    let request1: NSMutableURLRequest = NSMutableURLRequest(URL: url) 

    request1.HTTPMethod = "GET" 
    let queue:NSOperationQueue = NSOperationQueue() 

    NSURLConnection.sendAsynchronousRequest(request1, queue: queue, completionHandler:{ (response: NSURLResponse?, data: NSData?, error: NSError?) -> Void in 

    do 
    { 
     if let jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary 
     { 
      print(jsonResult) 
      //print(jsonResult["isUser"] as! Bool) 
      let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
      print("raw response: \(responseString!)") 
     } 
    } catch let error as NSError 
    { 
     print(error.localizedDescription) 
     print("error") 
     let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
     print("raw response: \(responseString)") 
    } 
    }) 
} 

它给了我想要的结果。

输出

{ 
    password = iosappusettest1; 
    username = iosappusettest; 
} 
raw response: {"username":"iosappusettest","password":"iosappusettest1"} 

但是当我添加功能检查,如果用户注册 - 我总是得到一个无效JSON

这里是PHP函数

function authentication ($user, $pass){ 
    global $wp, $wp_rewrite, $wp_the_query, $wp_query; 

    if(empty($user) || empty($pass)){ 
    return 0; 
    } else { 
    require_once('../wp-blog-header.php'); 
    $status = 0; 
    $auth = wp_authenticate($user, $pass); 
    if(is_wp_error($auth)) {  
     $status = 0; 
    } else { 
     $status = 1; 
    } 
    return $status; 
    } 
} 

我相信问题是require_once函数。在原始响应中,我收到很多html标记和其他数据,这些数据使我的JSON无效。

  • 有没有什么办法可以清除页面并只输出JSON? PHP中的echo "<script> document.documentElement.innerHTML = ''; </script>";没有帮助我。也许jQuery会帮助?
  • 也许我可以检查用户是否以另一种方式注册?
  • 也许我可以将结果存储在单独的地方或临时文件中?
  • 也许我应该包装我的数据不是在JSON,但别的东西?

所以我需要用户名和密码传递给PHP,具有认证功能检查(使用require_once),并发送回$状态iOSSwift应用屁股变量。

问题的答案。 问题是在WP插件,重定向的所有unlogined用户在该域的所有环节,所以当我叫require_once('../wp-blog-header.php');我总是被重定向到主页,这是与所有的HTML标记错误的JSON文件的原因。

回答

0

请纯JSON您的回复,并留下任何HTML标签,通过您的iOS端不需要他们。

+0

有一个很大的乐趣,但我不能。问题是,当我添加认证功能(使用require_once) - 我总是得到无效的JSON和HTML标签。 – fundamental3

+0

我不知道PHP,但我认为你无效的JSON只是'0'?您的第一个PHP代码段正确返回json。您可以尝试返回与您的身份验证方法中类似的内容。 – Fujia

+0

问题是您的php代码不会返回正确的JSON。 – Fujia