Paul Heinemeyer Paul Heinemeyer - 1 year ago 86
Swift Question

Error when trying to get Json data from php script

I get the following error when i try to get data. In the internet i read that its because the php script is invalid and don't return json data. But the php script runs fine and outputs the right data.

Error Message :

Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo={NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}

I tried to allow fragments but then i get just another error message.

Here is the swift code where i try to get the data :

let myUrl = NSURL(string: "")

let request = NSMutableURLRequest(URL: myUrl!)
request.HTTPMethod = "POST"

let postString = "userEmail=\(userEmail!)&userPassword=\(userPassword!)"

request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)

NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: { (data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in

if(error != nil)
var alert = UIAlertController(title: "Achtung", message: error?.localizedDescription, preferredStyle: UIAlertControllerStyle.Alert)

let action = UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: nil)


self.presentViewController(alert, animated: true, completion: nil)
do {
let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSDictionary

if let parseJSON = json {

let userId = parseJSON["userId"] as? String
if( userId != nil)
let mainView = self.storyboard?.instantiateViewControllerWithIdentifier("main") as! FlickrPhotosViewController

let mainPageNavi = UINavigationController(rootViewController: mainView)
//open mainView
let appdele = UIApplication.sharedApplication().delegate
appdele?.window??.rootViewController = mainPageNavi

} else {
let userMassage = parseJSON["message"] as? String
let myAlert = UIAlertController(title: "Alert", message: userMassage, preferredStyle: UIAlertControllerStyle.Alert);

let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)
self.presentViewController(myAlert, animated: true, completion: nil)


} catch{


and this is the important part of the php file :

$userSecuredPassword = $userDetails["user_password"];

$userSalt = $userDetails["salt"];

if($userSecuredPassword === sha1($userPassword . $userSalt))

$returnValue["userFirstName"] = $userDetails["first_name"];

$returnValue["userLastName"] = $userDetails["last_name"];

$returnValue["userEmail"] = $userDetails["email"];

$returnValue["userId"] = $userDetails["user_id"];
} else {

$returnValue["message"]="User not found";

echo "failed";

echo json_encode($returnValue);


echo json_encode($returnValue);

$returnValue returns this when i print it:
Array ( [status] => 200 [userFirstName] => Paul [userLastName] => Heinemeyer [userEmail] => paul_heine [userId] => 63 )

Answer Source

When you properly format your PHP code, you will see, that in the else part you have

echo "failed";
echo json_encode($returnValue);

which results in


As the error message already says, this "JSON text did not start with array or object ..."

Maybe there is similar output for the other if part.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download