快速解析时无法在json post请求参数中添加文本字段输入的文本
Posted
技术标签:
【中文标题】快速解析时无法在json post请求参数中添加文本字段输入的文本【英文标题】:Unable to add textfield entered text in json post request parameter while parsing in swift 【发布时间】:2019-11-21 09:23:41 【问题描述】:最初,我从以前的视图控制器获取文本字段文本,以了解要在当前视图控制器中添加的文本。如果我在文本字段中点击,以前的文本将为空并且我正在添加文本,但该文本我无法添加当前视图控制器后参数..这里我也得到了以前的视图控制器文本。
这是我的代码:
@IBOutlet weak var tableView: UITableView!
var cell : BillerTableViewCell?
var textFieldArray = [String]()
var selectedBiller: JsonDataBiller?
var toplabeText: String?
var textFieldValue: String?
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
cell = tableView.dequeueReusableCell(withIdentifier: "textfieldCell", for: indexPath) as! BillerTableViewCell
cell?.searchTextfield.delegate = self
if let param = selectedBiller?.bcustomerparms[indexPath.row]
cell?.searchTextfield.text = param.paramName
textFieldValue = cell?.searchTextfield.text
else
cell?.searchTextfield.text = "missing data"
return cell!
func textFieldDidBeginEditing(_ textField: UITextField)
textField.text = ""
func textFieldShouldReturn(_ textField: UITextField) -> Bool
textField.resignFirstResponder()
return true
@objc func buttonClicked(sender: UIButton)
billerFetchService()
func billerFetchService()
print("fetch paramname \(textFieldKey)")
// var textFieldValue: String = (cell?.searchTextfield.text)!
let parameters = ["billDetails": [
"billerId" : "EPDCLOB00ANP01",
"customerParams" : [["name": textFieldKey,"value": textFieldValue]]]] as [String : Any]
print("the textfield value is \(textFieldValue)")
let url = URL(string: "https://app.com/emi_v1/fetch")
var req = URLRequest(url: url!)
req.httpMethod = "POST"
req.addValue("application/json", forHTTPHeaderField: "Contet-Type")
req.addValue("application/json", forHTTPHeaderField: "Accept")
guard let httpBody = try? JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted) else return
req.httpBody = httpBody
let session = URLSession.shared
session.dataTask(with: req, completionHandler: (data, response, error) in
if response != nil
// print(response)
if let data = data
do
var json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as! [String: Any]
// print("fetching json \(json)")
let fetchStatus = json["status"] as? String
if fetchStatus == "sucess"
let billerDetails = json["response"] as! [String:Any]
let value = billerDetails["billerResponse"] as! String
print(value)
let res = try JSONSerialization.jsonObject(with:Data(value.utf8)) as! [String: Any]
self.billerName = res["billerName"] as? String
var consumName = res["customerName"] as? String
print("fetch only APEPDCL biller name \(self.billerName)")
DispatchQueue.main.async
let nextViewController = self.storyboard?.instantiateViewController(withIdentifier: "FetchBillerViewController") as? FetchBillerViewController
nextViewController?.nameText = self.billerName
nextViewController?.consumrName = consumName
self.navigationController?.pushViewController(nextViewController!, animated: true)
else
DispatchQueue.main.async
AlertFun.ShowAlert(title: "", message: "Invalid service Number", in: self)
catch
print("error")
).resume()
【问题讨论】:
直接使用textfield.text!获得你的价值。使用 KeychainWrapper 有什么需要? @KeshuRai,我没有使用 ketchain,那是用于另一个领域...我已经删除了那行 好的。让 finalString = yourTextField.text! .. 现在在您的请求中传递这个 finalString @KeshuRai,如果文本字段在视图中,但文本字段在表格视图中,这就是为什么..请帮助 @KeshuRai,请看一下我的cellForRowAt
...如何添加
【参考方案1】:
在视图控制器中声明一个变量来存储最终值。
var finalSearchValue : String = ""
现在在你的 cellForRowAtIndexPath 方法中添加这一行:
cell.searchFieldText.addTarget(self, action: #selector(searchEditingChanged(textField:)), for: .editingChanged)
现在在你的视图控制器中声明这个函数:
@objc func searchEditingChanged(textField: UITextField)
finalSearchValue = textField.text!
就是这样。您的 finalSearchValue 变量现在包含输入文本。将它用于您的 api 请求。
如果有任何问题,请告诉我。
【讨论】:
:) 很高兴为您提供帮助以上是关于快速解析时无法在json post请求参数中添加文本字段输入的文本的主要内容,如果未能解决你的问题,请参考以下文章
AWS Lambda 错误:当 url 参数包含 JSON 数组时,“无法将请求正文解析为 json”
python 解析ajax请求带有json参数,请求方式是post的url(注意:参数的json格式的)