无效的 JSON 需要 Swift iOS
Posted
技术标签:
【中文标题】无效的 JSON 需要 Swift iOS【英文标题】:Invalid JSON require Swift iOS 【发布时间】:2016-07-15 09:51:27 【问题描述】:我正在开发一个简单的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"
但是当我添加检查用户是否注册的功能时 - 我总是得到一个 invalid 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
app ass 变量。
问题已回答。
问题出在 WP 插件中,它将所有未登录用户从该域中的所有链接重定向,所以当我调用 require_once('../wp-blog-header.php');
时,我总是被重定向到主页,这就是带有所有 HTML 标记的错误 JSON 文件的原因。
【问题讨论】:
【参考方案1】:将您的响应保留为纯 JSON,并省略任何 html 标记,因为您的 ios 端不需要它们。
【讨论】:
很高兴,但我不能。问题是当我添加身份验证功能(使用 require_once)时 - 我总是得到无效的 JSON 和 html 标签。 我不懂php,但我认为你的无效JSON只是一个0
?您的第一个 php sn-p 正确返回 json。您可以尝试在您的身份验证方法中返回类似的内容。
问题是你的 php 代码没有返回正确的 JSON。
我又检查了一次。仍然得到错误。 *无法读取数据,因为它的格式不正确。*在 php 文件中的 require_once 之后,我得到了很多不同的标签,如 和 等等..
在 php 中找到一些处理 json 的有用库。以上是关于无效的 JSON 需要 Swift iOS的主要内容,如果未能解决你的问题,请参考以下文章
Swift - JSONSerialization 无效的 JSON
Swift - JSONSerialization 无效的 JSON