Как передать данные в URL WkWebView в Swift - PullRequest
0 голосов
/ 23 марта 2020

В моем проекте есть словарь. Мне нужно передать его в WKWebView в качестве параметра записи. Когда я пытаюсь преобразовать строку в URL, он возвращает нулевое значение. Любой совет для меня?

Это мой словарь с именем CartDict.

{
  "address_id" : "4064",
  "customer_id" : "3239",
  "language_id" : "1",
  "products" : [
    {
      "option" : "",
      "product_id" : "1576",
      "quantity" : "2"
    },
    {
      "option" : "",
      "product_id" : "1573",
      "quantity" : "1"
    },
    {
      "option" : "",
      "product_id" : "1575",
      "quantity" : "1"
    }
  ],
  "set_currency" : "EUR"
}

Это мой код:

let urlStr = "https://test.com/index.php?route=checkout/checkout_mobile&data=\(cartDict)"

let trimmedUrl = urlStr.trimmingCharacters(in: CharacterSet(charactersIn: "")).replacingOccurrences(of: " ", with: "%20")
let url = URL(string: trimmedUrl)
print(url)
self.webView.load(URLRequest(url: url!))

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 23 марта 2020

Во-первых, вам нужно убедиться, что строка URL-адреса верна, попробуйте распечатать ее print(urlStr) Обычно параметры записи - это не параметры URL-адреса, а параметры тела http, поэтому их необходимо добавить в тело запроса. Вам нужно знать, какой формат ожидает сервер. Современные apis используют JSON, поэтому вам нужно отформатировать словарь в json (однако опубликованный вами словарь на самом деле не является быстрым словарем, поэтому он выглядит нормально.).

    let urlStr = "https://test.com/index.php?route=checkout/checkout_mobile"

    let trimmedUrl = urlStr.trimmingCharacters(in: CharacterSet(charactersIn: "")).replacingOccurrences(of: " ", with: "%20")
    let url = URL(string: trimmedUrl)
    let request = URLRequest(url: url)
request.httpBody = Data(cartDict.utf8)
    self.webView.load(request)
0 голосов
/ 23 марта 2020

Установите httpBody для ваших данных из словаря

let trimmedUrl = urlStr.trimmingCharacters(in: CharacterSet(charactersIn: "")).replacingOccurrences(of: " ", with: "%20")
let url = URL(string: trimmedUrl)! 
let dic:[String:Any] = ["address_id" : "4064", "customer_id" : "3239", "language_id" : "1", "products" : [ [ "option" : "", "product_id" : "1576", "quantity" : "2" ], [ "option" : "", "product_id" : "1573", "quantity" : "1" ], [ "option" : "", "product_id" : "1575", "quantity" : "1" ] ], "set_currency" : "EUR" ]
let data = try? JSONSerialization.data(withJSONObject: dic)
var req = URLRequest(url: url)
req.httpBody =   data
self.webView.load(req)
...