に配列を返す私は現在、次のエラーを取得していたときにJSON_encodeは、エラーの原因:私は「コミュニティを取得するために私のPHPスクリプトに機能を追加したときXcodeでPHPスクリプトからスウィフト
Error Domain=NSCocoaErrorDomain Code=3840 "Garbage at end." UserInfo={NSDebugDescription=Garbage at end.}
は、これは単に起こって開始されました'詳細をデータベースから取得します。これらの詳細は配列に格納されます。
次の行echo json_encode($communities);
は問題なく動作しているため、問題が発生しているようです。以下は完全なuserLogin.phpスクリプトです。その行は一番下にあります。
<?php
require ("Conn.php");
require ("MySQLDao.php");
$email = htmlentities($_POST["email"]);
$password = htmlentities($_POST["password"]);
$returnValue = array();
if(empty($email) || empty($password))
{
$returnValue["status"] = "error";
$returnValue["message"] = "Missing required field";
echo json_encode($returnValue);
return;
}
$secure_password = md5($password);
$dao = new MySQLDao();
$dao->openConnection();
$userDetails = $dao->getUserDetailsWithPassword($email,$secure_password);
if(!empty($userDetails))
{
$returnValue["status"] = "Success";
$returnValue["message"] = "User is registered";
echo json_encode($userDetails);
}else{
$returnValue["status"] = "error";
$returnValue["message"] = "User is not found";
echo json_encode($returnValue);
}
//once logged in run function to get list of communities
$communities = array();
$communities = $dao->getCommunities($email);
echo json_encode($communities);
$dao -> closeConnection();
?>
:私は問題はスウィフトが適切に配列を受けていないとされていること、その後かなり確信して
[{"name":"EnclliffeT"},{"name":"OneWinner"},{"name":"Yesss"},{"name":"Treert"},{"name":"Westbrook"}]
。
これはエラー与えユーザがログインしたときに実行さスウィフトコードです:違法JSONで使用すると、複数のJSONブロックを出力している
@IBAction func loginButtonTapped(_ sender: AnyObject)
{
let userEmail = userEmailTextField.text;
let userPassword = userPasswordTextField.text;
if (userPassword!.isEmpty || userEmail!.isEmpty) { return; }
// send user data to server side
let myUrl = URL(string: "http://www.quasisquest.uk/KeepScore/userLogin.php");
var request = URLRequest(url:myUrl!);
request.httpMethod = "POST";
let postString = "email=\(userEmail!)&password=\(userPassword!)";
request.httpBody = postString.data(using: String.Encoding.utf8);
let task = URLSession.shared.dataTask(with: request) { (data: Data?, response: URLResponse?, error: Error?) in
DispatchQueue.main.async
{
if(error != nil)
{
//Display an alert message
let myAlert = UIAlertController(title: "Alert", message: error!.localizedDescription, preferredStyle: UIAlertControllerStyle.alert);
let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler:nil)
myAlert.addAction(okAction);
self.present(myAlert, animated: true, completion: nil)
return
}
do {
let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String:AnyObject]
// retrieve login details and check to see if all ok
if let parseJSON = json {
let returnValue = parseJSON["status"] as? String
if(returnValue != "error")
{
self.delegate?.userLoggedIn(data: userEmail!)
UserDefaults.set(UserDefaults.standard)(true, forKey: "isUserLoggedIn");
self.dismiss(animated: true, completion: nil)
} else {
// display an alert message
let userMessage = parseJSON["message"] as? String
let myAlert = UIAlertController(title: "Alert", message: userMessage, preferredStyle: UIAlertControllerStyle.alert);
let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler:nil)
myAlert.addAction(okAction);
self.present(myAlert, animated: true, completion: nil)
}
}
} catch
{
print(error)
}
}
}
task.resume()
}
私が参照してください。これは、PHPスクリプトがjson_encode($ communities)を出力しようとしているためです。およびjson_encode($ returnValue); ? ベストソリューションは何でしょうか? – RDowns
はSINGLE構造を構築します。 '$ data ['status'] =真; $ data ['message'] = '成功'; $ data ['data'] = ...あなたが返すことを希望するデータ 'を返し、クライアントコードが' status'フィールドをチェックしてそこから移動します。 –
私の目的は、私はUITableViewの内容を表示することができますので、配列を運ぶことです。異なるユーザーが異なるコミュニティ数のメンバーになるため、上記の方法が適していますか? – RDowns