2016-05-30 3 views
1

Как я могу использовать запрос POST с параметрами для получения JSON? Я знаю, как это сделать с помощью простого запроса GET. URL запроса является http://gyminyapp.azurewebsites.net/api/Gym и запрос параметраПолучить результаты JSON с запросом POST с параметрами

{ 
    "SearchCircle": { 
    "Center": { 
     "Latitude": 0, 
     "Longitude": 0 
    }, 
    "Radius": 0 
    }, 
    "City": "string", 
    "ZipCode": 0, 
    "Type": "string" 
} 

Я хотел просто использовать поиск круг часть этого, что означает, что я могу игнорировать город и почтовый индекс поля. Мне нужно предоставить Latitude/Longitude, который я получаю от текущего местоположения пользователя. Мне также нужно установить тип «радиус».

Для простого запроса GET с использованием этой версии GET я делаю это.

let url = NSURL(string: "http://gyminyapp.azurewebsites.net/api/Gym") 
     let data = NSData(contentsOfURL: url!) 
     do { 
      let json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) 
      for gym in json as! [AnyObject] { 
       gyms.append(gym) 
      } 
     } catch { 
      print("Error") 
     } 
+0

Если это работает с GET, почему вы хотите использовать POST? Более того, если вы извлекаете данные, GET - это более подходящий глагол для него. – Bigood

+0

В моем API GET дает мне все местоположения в моей базе данных. Этот POST позволяет мне сузить результаты вниз с определенными критериями. – raginggoat

ответ

2

Это рабочий код, нужно просто поставить значение ваших параметров запроса.

let session = NSURLSession.sharedSession() 
    let url = "http://gyminyapp.azurewebsites.net/api/Gym" 
    let request = NSMutableURLRequest(URL: NSURL(string: url)!) 
    request.HTTPMethod = "POST" 
    request.addValue("application/json", forHTTPHeaderField: "Content-Type") 
    let params:[String: AnyObject] = ["Type" : "string","SearchCircle" : ["Radius" : 0, "Center" : ["Latitude" : 0, "Longitude" : 0]]] 
    do{ 
     request.HTTPBody = try NSJSONSerialization.dataWithJSONObject(params, options: NSJSONWritingOptions()) 
     let task = session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in 
      if let response = response { 
       let nsHTTPResponse = response as! NSHTTPURLResponse 
       let statusCode = nsHTTPResponse.statusCode 
       print ("status code = \(statusCode)") 
      } 
      if let error = error { 
       print ("\(error)") 
      } 
      if let data = data { 
       do{ 
       let jsonResponse = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions()) 
       print ("data = \(jsonResponse)") 
       }catch _ { 
        print ("OOps not good JSON formatted response") 
       } 
      } 
     }) 
     task.resume() 
    }catch _ { 
     print ("Oops something happened buddy") 
    } 

Тогда в if let data = data вам нужно разобрать ответ. Я проверил ответ, это форматированный массив JSON.

0

Вот как я это сделал. Просто сделайте NSDictionary из параметров и конвертируйте в NSData, я назвал это postData. А потом обычно, отправить что PostData в requestBody

 let parameters = [ 
      "SearchCircle": 
       [ "Center" : 
        ["Latitude" : 0, 
        "Longitude" : 0] ] 
      "Radius" : 0, 
      "City" : "", ... 
      ... and so on 


      ]   ] 
     do 
     { 
      let postData = try NSJSONSerialization.dataWithJSONObject(parameters, options: .PrettyPrinted) 

      let request = NSMutableURLRequest(URL: NSURL(string: "http...")!, 
               cachePolicy: .UseProtocolCachePolicy, 
               timeoutInterval: 10.0) 
      request.HTTPMethod = "POST" 

      request.HTTPBody = postData 

      let session = NSURLSession.sharedSession() 
      let dataTask = session.dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in 
       if (error != nil) { 
        print(error) 
       } else { 
        let httpResponse = response as? NSHTTPURLResponse 
        print(httpResponse) 
        do { 
         // JSON serialization 
         self.dictionary = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions()) as! NSDictionary 
         // if any data 
        } 
        catch { 

        } 
       } 
      }) 

      dataTask.resume() 
     } 
     catch { 

     } 
Смежные вопросы