Используя quicktype , я сгенерировал вашу модель и сериализационные помощники из вашего образца:
import Foundation
struct User: Codable {
let name: String
let email: String
let password: String
}
extension User {
static func from(json: String, using encoding: String.Encoding = .utf8) -> OtherUser? {
guard let data = json.data(using: encoding) else { return nil }
return OtherUser.from(data: data)
}
static func from(data: Data) -> OtherUser? {
let decoder = JSONDecoder()
return try? decoder.decode(OtherUser.self, from: data)
}
var jsonData: Data? {
let encoder = JSONEncoder()
return try? encoder.encode(self)
}
var jsonString: String? {
guard let data = self.jsonData else { return nil }
return String(data: data, encoding: .utf8)
}
}
Затем проанализируйте значения User
следующим образом:
let user = User.from(json: """{
"name": "myUser",
"email": "user@example.com",
"password": "passwordHash"
}""")!
Индикатор действия Ajax Google для нахождения большого количества изображений и генераторов изображения (само "вращающееся" изображение является анимированным GIF).
Вот одна ссылка для запущения Вас.
С изображением в руке используйте JQuery для переключения видимости изображения (или возможно его родительский Тег Div). См. эту ссылку еще для некоторой информации.
RP
этот сайт сделает это для Вас:
и на OS X это назвало "Beachball", и мне нравится добавлять "Смерти".
Я предполагаю, что Вы означали что-то указывать на фоновое действие во время вызова Ajax.
Я склонен иметь класс CSS, который устанавливает фоновое изображение на немного анимированный GIF, с соответствующим дополнением и расположением (не забудьте выключать фоновое повторение), и затем добавьте и удалите тот класс с помощью нескольких помощников JavaScript, позвонивших, когда вызов Ajax запускается, и когда обратный вызов ответа работает.