无效的 JSON 需要 Swift iOS


Invalid JSON require Swift iOS

我正在开发一个简单的iOS Swift应用程序。我想为我的应用程序制作一个登录屏幕,该屏幕将连接到 Wordpress 中已经存在的用户数据库。我找到了一些PHP脚本和Swift代码。

我正在尝试发布用户名并登录,检查它并返回结果(isUser = true/false or 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);
?>

和 Swift 函数

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)检查它,并将$status发回iOS Swift应用程序变量。

问题已得到解答。问题出在WP插件中,它从该域中的所有链接重定向了所有未登录的用户,因此当我调用require_once('../wp-blog-header.php');时,我总是被重定向到主页,这就是带有所有HTML标记的错误JSON文件的原因。

保持你的响应是纯JSON,并省略任何html标签,因为你的iOS端不需要它们。