从 PHP 脚本接收“json_encode”时 Swift JSON 出错。没有它也能正常工作

Posted

技术标签:

【中文标题】从 PHP 脚本接收“json_encode”时 Swift JSON 出错。没有它也能正常工作【英文标题】:Error in Swift JSON when receiving 'json_encode' from PHP script. Works fine without it 【发布时间】:2016-10-20 08:41:39 【问题描述】:

我有一个按钮的 Swift 函数,当按下该按钮时,它会通过 php 将一些详细信息写入数据库:

 @IBAction func createCommunityButtonTapped(_ sender: AnyObject) 

    let communityName = communityNameTextField.text;
    if (communityName!.isEmpty)
        displayMyAlertMessage(userMessage: "You must name your Community");

        return;
    else

        func generateRandomStringWithLength(length: Int) -> String 

            var randomString = ""
            let letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

            for _ in 1...length 
                let randomIndex  = Int(arc4random_uniform(UInt32(letters.characters.count)))
                let a = letters.index(letters.startIndex, offsetBy: randomIndex)
                randomString +=  String(letters[a])
            

            return randomString
        

        let communityCode = generateRandomStringWithLength(length: 6)
        passwordTextField.text = communityCode

        let myUrl = URL(string: "http://www.quasisquest.uk/KeepScore/createCommunity.php?");

        var request = URLRequest(url:myUrl!);
        request.httpMethod = "POST";

        let postString = "communityname=\(communityName!)&code=\(communityCode)&email=\(myEmail!)";

        request.httpBody = postString.data(using: String.Encoding.utf8);

        let task = URLSession.shared.dataTask(with: request)  (data, response, error) in
        if (try! JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String:AnyObject]) != nil 
            
         

        task.resume()

    


除了我将这个echo jsonline 添加到 PHP 脚本中之外,该函数工作得很好:

if($newresult)

    $returnValue["status"] = "Success";
    $returnValue["message"] = "Community is registered";
    echo json_encode($returnValue);
    return;

然后我在这一行收到错误Thread 8: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subside = 0x0)

if (try! JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String:AnyObject]) != nil

并且在调试区有以下细节

data Data? some response URLResponse? 0x0000618000223500 error Error? nil none

我想我遗漏了一行,或者需要为 JSONSerialization 设置一个变量而不是“尝试!”但我不确定是什么。

【问题讨论】:

【参考方案1】:

您正在返回null。试试这个

if($newresult)

 $returnValue["status"] = "Success";
 $returnValue["message"] = "Community is registered";
 return json_encode($returnValue);

【讨论】:

以上是关于从 PHP 脚本接收“json_encode”时 Swift JSON 出错。没有它也能正常工作的主要内容,如果未能解决你的问题,请参考以下文章

json_encode返回的数据怎么接收

PHP 和 AJAX:如何在 PHP while 循环中显示 json_encode 数据?

将数据从 PHP 脚本发送到 iOS

从 PHP 脚本返回 JSON 和 HTML

PHP“漂亮打印”json_encode [重复]

php json_encode数据格式化2种格式[]和{}