2016-10-21 11 views
0

に配列を返す私は現在、次のエラーを取得していたときにJSON_encodeは、エラーの原因:私は「コミュニティを取得するために私のPHPスクリプトに機能を追加したときXcodeでPHPスクリプトからスウィフト

Error Domain=NSCocoaErrorDomain Code=3840 "Garbage at end." UserInfo={NSDebugDescription=Garbage at end.}

は、これは単に起こって開始されました'詳細をデータベースから取得します。これらの詳細は配列に格納されます。

次の行echo json_encode($communities);は問題なく動作しているため、問題が発生しているようです。以下は完全なuserLogin.phpスクリプトです。その行は一番下にあります。

私はブラウザにSQL関数をテストしてきたし、それが正しい値を返し、以下の出力
<?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() 

} 

答えて

1

を、:

if(!empty($userDetails)) 
    ... 
    echo json_encode(...) 
} else { 
    ... 
    echo json_encode(...) 
} 
... 
echo json_encode(...) 

A JSONテキストのブロックには、1つだけSINGLEjson構造を含めることができます。 2つあるので、JSON構文エラーがあります。

echo json_encode('hi'); 
echo json_encode('mom'); 

"hi""mom" 

を生成し、JSON以来は、あなたは基本的にこれを実行しようとしているJavaScriptコード IS:

var foo = "hi""mom"; 
       ^--syntax error, unexpected string 
+0

私が参照してください。これは、PHPスクリプトがjson_encode($ communities)を出力しようとしているためです。およびjson_encode($ returnValue); ? ベストソリューションは何でしょうか? – RDowns

+0

はSINGLE構造を構築します。 '$ data ['status'] =真; $ data ['message'] = '成功'; $ data ['data'] = ...あなたが返すことを希望するデータ 'を返し、クライアントコードが' status'フィールドをチェックしてそこから移動します。 –

+0

私の目的は、私はUITableViewの内容を表示することができますので、配列を運ぶことです。異なるユーザーが異なるコミュニティ数のメンバーになるため、上記の方法が適していますか? – RDowns

関連する問題