2016-02-08 49 views
0

Hy,我是swift新手,我正在做nsurlsession的工作。 這裏是我的代碼使用參數製作nsurlsession請求

func webRequestToServer() { 
      let request = NSURLRequest(URL: NSURL(string:"some url")!) 
      let urlSession = NSURLSession.sharedSession() 
      let task = urlSession.dataTaskWithRequest(request, completionHandler: { 
       (data, response, error) -> Void in 
       if let error = error { 
        print(error) 
        return } 
       // Parse JSON data 
       if let data = data { 

        let dataString = NSString(data: data, encoding: NSUTF8StringEncoding) 
        print(dataString) 
        NSOperationQueue.mainQueue().addOperationWithBlock({() -> Void in 

        }) 
       } }) 
      task.resume() 
     } 
從這個代碼從websrvice數據到達

這樣,但我想這樣做,首先它從我的兩個參數,然後顯示數據?請幫幫我。對不起我的英語不好。它很弱。

+0

下面的答案假設您的Web服務期待JSON請求。但這並不完全清楚。有很多方法可能需要格式化請求(例如,'application/x-www-form-urlencoded'與'application/json'的'Content-Type')。你能準確地告訴我們服務器需要什麼格式的請求嗎? – Rob

+0

如果您的服務器期待'application/x-www-form-urlencoded'請求(例如,您在web服務代碼中看到引用'$ _POST'的東西),請參閱http://stackoverflow.com/a/33574126/1271826或http://stackoverflow.com/a/31031859/1271826。 – Rob

回答

0

您可以在字典中擁有參數,然後將其轉換爲NSData。試試以下

let request = NSURLRequest(URL: NSURL(string:"http://o16-labs.com/swapby/getcategoryinfo")!) 
let params = ["key1" : "value1", "key2" : "value2"] as Dictionary<String, AnyObject> 
request.HTTPBody = try? NSJSONSerialization.dataWithJSONObject(params, options:NSJSONWritingOptions.PrettyPrinted) 
+0

我認爲你的意思是'NSMutableURLRequest'。他可能想要將'HTTPMethod'指定爲'POST',這取決於服務器的要求。而且,顯然,您的答案假設他需要JSON請求,但這一點並不十分清楚。 – Rob

+0

它顯示錯誤在這一點 request.HTTPBody = try? NSJSONSerialization.dataWithJSONObject(參數,選項:NSJSONWritingOptions.PrettyPrinted) 錯誤是不能指定值 –

+0

@MuhammadMurtaza - 是的,用'NSMutableURLRequest'替換那個'NSURLRequest'。 – Rob

1

幀的參數字典格式和參數,以HTTPBody.Below代碼可以幫助你設定...

let myUrl = NSURL(string: "http://o16-labs.com/swapby/getcategoryinfo"); 
    let request = NSMutableURLRequest(URL:myUrl!); 
    request.HTTPMethod = "POST"; 
    // Compose a query string 
    let postString = "firstName=James&lastName=Bond"; 

    request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding); 

    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 
     data, response, error in 

     if error != nil 
     { 
      print("error=\(error)") 
      return 
     } 

     // You can print out response object 
     print("response = \(response)") 

     // Print out response body 
     let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
     print("responseString = \(responseString)") 

     //Let’s convert response sent from a server side script to a NSDictionary object: 

     do { 
      if let jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary { 
       print(jsonResult) 
      } 
     } catch let error as NSError { 
      print(error.localizedDescription) 
     } 

    } 

    task.resume() 
+0

該代碼在這一點上給錯誤 request.HTTPBody = NSJSONSerialization.dataWithJSONObject(參數,可以選擇:無,錯誤:錯誤) 錯誤是無法分配屬性值 –

+0

採取更新的代碼,並檢查它 –

+0

@MuhammadMurtaza你長了輸出?在swift中添加catch塊來進行錯誤處理,否則它會在調用中顯示額外參數錯誤等錯誤。 Swift 2.0中的編譯錯誤 –