2017-12-21 2 views
0

저는 프로그래밍에 익숙하지 않습니다. 이제 PHP를 백엔드 서버로 사용하여 iOS 앱을 만드는 법을 배우고 있습니다.오류 도메인 HTTP 요청에서 GET 메서드를 사용할 때

내가 아는 한, http 메서드에서 GET 메서드를 사용하면 브라우저에서 쿼리를 작성하는 것과 같습니다.

하자, 난 브라우저에서 다음과 같이 쓸 수 있습니다 내가 서버에서 JSON 응답을 얻기 위해 쿼리 항목으로 'ID를 보낼하고 싶은 말은

HTTP : /website.com/post.php ID = 23

저는 PHP를 사용하여 백엔드를 구축하고 해당 ID를 잡으려고 서버 측 코드에서 $ _REQUEST를 사용합니다 ($ _REQUEST는 POST 메서드로 GET &을 수용 할 수 있음).

브라우저에서 해당 경로에 액세스 할 때 서버에서 JSON 데이터 응답을받을 수 있습니다. 오류 도메인 = NSCocoaErrorDomain 코드 = 3840 "값 없음."내가 GET 메소드를 사용하여 내 iOS 앱에서 해당 쿼리를 전송하려고 할 때

하지만, 내가 오류를

오류가 없다 사용자 정보 = {NSDebugDescription = 값 없음.}

하지만 POST 해당 HTTP 방식을 변경할 때, 그것은 완벽하게 작동한다. 다음은 iOS 앱에서 요청을 전송할 때 활성화되는 메소드입니다. 데이터베이스에 새로운 데이터를 만들지 않고 데이터를 가져 오려고합니다.

func loadPost() { 
    let id = userInfo!["id"] as! String 

    let url = URL(string: "http://localhost/Twitter/post.php") 

    var request = URLRequest(url: url!) 
    request.httpMethod = "GET" <--- if i change this to POST, it is worked 

    let body = "id=\(id)" 
    request.httpBody = body.data(using: .utf8) 

    let session = URLSession.shared 
    let task = session.dataTask(with: request, completionHandler: { (data, response, error) in 
     if error == nil { 
      DispatchQueue.main.async { 
       self.activityIndicator.startAnimating() 
       do { 
        let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary 
        guard let parsedJSON = json else { 
         print ("error while parsing JSON") 
         return 
        } 
        print(parsedJSON) 
       } catch { 
        print ("Error : \(error)") 
       } 
      } 
     } else { 
      print ("Error : \(error!)") 
     } 
    }) 
    task.resume() 
} 

여기에 무슨 문제가 있습니까? GET 메서드가 아닌 POST 메서드를 사용하는 경우에만 작동하는 이유는 무엇입니까?

+1

관련없는 그들에게 기대하는 POST 같은 쿼리 문자열 매개 변수로 매개 변수를 기대하지만, 스위프트에'사용'[문자열을 NSDictionary'를 사용하지 않는 : 어떤을 ]'JSON 사전을 구문 분석 할 때 사용하고'.mutableContainers'를 사용하지 않습니다. Swift에서는 효과가 없습니다. –

+0

Safari에서 URL을 사용해도 작동합니까? 데이터를 다시 받으시겠습니까? – Larme

답변

관련 문제