- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我目前正在和提出这个问题的人一起开发一个应用程序:Post request always wrapped by optional text他负责 iOS 部分的编程,我负责 Android 部分的编程,我完全不知道这整个 Swift 的东西是什么让 iOS 中的编码有点困难,因为他几乎没有编程经验。
现在回答问题:我们正在向我编写的 php 脚本发送 POST 请求,该脚本获取发布的用户名和密码并再次向应用程序发送 json 响应。
$username = $_POST['username'];
$password = $_POST['password'];
if (!empty($username) && !empty($password)) {
$encrypted_password = md5($password);
$user -> login($username,$encrypted_password);
} else {
$json['error'] = 'You must fill all fields!';
echo json_encode($json);
mysqli_close($this->connection);
}
例如,如果用户名或密码为空,我们应该得到这样的响应:
{"error":"You must fill all fields!"}
对于 Android,这非常有效,我们可以处理响应。
但在 iOS 中,当我们对字符串进行编码时,它会将我们发送到 php 脚本的整个字符串转换为:
Optional(<75736572 6e616d65 3d612670 61737377 6f72643d 61>)
因为 php 脚本需要这样的数据:
username=xyz&password=xyz
当然不行。
那么我们如何才能将这个蹩脚的十六进制代码转换成我们想要的,或者我们如何才能防止这种畸形。
提前致谢:D
Swift 代码:
let username = UsernameTextField.text ?? ""
let password = PasswordTextField.text ?? ""
if(username.isEmpty || password.isEmpty) {return; }
let request = NSMutableURLRequest (URL: NSURL(string: "http://myip/loginregister.php")!)
request.HTTPMethod = "POST"
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField:"Content-Type")
let postString = "username=\(username)&password=\(password)"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in
guard error == nil && data != nil else {
// check for fundamental networking error
print("error=\(error)")
return
}
let data = postString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
do {
if let json = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? NSDictionary {
let success = json["success"] as? Int
print("Success: \(success)")
} else {
let jsonStr = NSString(data: data, encoding: NSUTF8StringEncoding)
print("Error could not parse JSON: \(jsonStr)")
}
} catch let parseError {
print(parseError) `JSONObjectWithData`
let jsonStr = NSString(data: data, encoding: NSUTF8StringEncoding)
print("Error could not parse JSON: '\(jsonStr)'")
}
}
task.resume()
错误信息:
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.}
Error could not parse JSON: 'Optional(username=a&password=a)'
最佳答案
a) 你丢弃了服务器的答案...
b) 熟悉调试器并检查 postString 的内容;它永远不是有效的 JSON,因此您不能期望转换成功。
c) 不要混淆发送和接收部分,而是一个接一个地解决问题。
d) 当您将结果作为评论在线发布时,回答起来会容易得多。
关于php - Swift HTTP Post Request dataUsingEncoding 格式错误的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35204596/
我目前正在和提出这个问题的人一起开发一个应用程序:Post request always wrapped by optional text他负责 iOS 部分的编程,我负责 Android 部分的编程
我将 NSString 转换为 NSData 以便通过 JSON 进行解析,但出现以下错误。 Terminating app due to uncaught exception 'NSInvalidA
我正在从 NSString 创建一个 CSV 文件,如下所示: NSData *csvFile = [csvString dataUsingEncoding:NSUTF8StringEncoding]
谁能帮我说说错误是什么原因? [NSNull dataUsingEncoding:]: unrecognized selector sent to instance 我被困在 iOS 应用程序的打印机
我见过两种组成HTTP body的方法。 第一个是: let url = NSURL(string: "http://example.com") let request = NSMutableURL
我正在使用 NSMutableURLRequest。在将参数发送到服务器时,我必须对其进行编码,因此我使用 dataUsingEncoding(NSUTF8StringEncoding) Swift
当我将 NSString 转换为 NSData 并返回时,我得到零结果 NSString * test = @"Wft0r3qkzXd5TDBeCahUB3MtHuc8Axwr"; NSData *
以下代码在 iOS 8 上运行良好,但在 iOS 9.0.2 上运行时我得到一些奇怪的结果: NSString * input = @"Hi there"; NSData * data = [inpu
我有一些像这样的 Objective-C++ 代码: // header @interface MyObjcClass - (void) myMethod: (NSString *) text; @e
我是一名优秀的程序员,十分优秀!