2013-10-31 3 views
4
내 응용 프로그램에있는 UIWebView 내부에 간단한 HTML 문서를 열하고

를 통과하지 않습니다 내 문제는 요청에 실제로 회신하는 것과 관련이 없기 때문입니다.아약스는 HTTP 본문

jQuery 1.10.2를 사용하고 있지만 순수 XMLHttpRequest 개체를 사용하면 정확히 동일한 결과를 얻습니다.

@implementation MyProtocol 

+ (BOOL)canInitWithRequest:(NSURLRequest *)request { 
    // only "data/info" requests are welcome 
    NSRange range = [[request.URL absoluteString] rangeOfString:@"data/info"]; 
    return NSNotFound != range.location; 
} 

+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request { 
    return request; 
} 

- (void)startLoading { 
    NSURLRequest *request = self.request; 

    NSLog(@"%@", request); 
    NSLog(@"Headers: %@", [request allHTTPHeaderFields]); 
    NSLog(@"Method: %@", [request HTTPMethod]); 
    NSLog(@"Body: %@", [request HTTPBody]); 
} 

- (void)stopLoading {} 

@end 

그런 다음 나는 응용 프로그램을 실행이 이후

는 Ajax 요청이 UIWebViewDelegate 방법에 의해 체포 할 수없는 문제 알려져있다, 나는 NSURLProtocol의 아주 간단 자손을 만들어 내 컨트롤러의 -viewDidLoad 방법에 등록하기로 결정 "PUT을 통해 제출"버튼을 누르고 Xcode의 콘솔 로그에서 다음을 관찰하십시오.

2013-10-31 16:38:28.077 TestHTTPPUTiOS[1608:4a03] <NSURLRequest: 0x8942c20> { URL: file:///Users/oradyvanyuk/Library/Application%20Support/iPhone%20Simulator/7.0.3/Applications/90232D0E-3243-4517-A2B7-15A17371E117/TestHTTPPUTiOS.app/data/info/put } 
2013-10-31 16:38:28.079 TestHTTPPUTiOS[1608:4a03] Headers: { 
    Accept = "text/plain, */*; q=0.01"; 
    "Content-Type" = "text/plain; charset=utf-8"; 
    Origin = "file://"; 
    "X-Requested-With" = XMLHttpRequest; 
} 
2013-10-31 16:38:28.079 TestHTTPPUTiOS[1608:4a03] Method: PUT 
2013-10-31 16:38:28.080 TestHTTPPUTiOS[1608:4a03] Body: (null) 

위에서 볼 수 있듯이 HTTP 요청 본문은 비어 있습니다. 난 POST 메서드를 사용하여 시도하고 콘솔에서 Method: POST의 유일한 차이와 정확히 같은 출력을 가지고.

GET 메서드를 사용할 때 비어있는 HTTP 본문도 표시되지만 실제로 양식의 putValue 문자열이 HTTP 요청의 URL에 도착하므로 이것이 예상됩니다.

이 문제에 대해 조언을 해 주시겠습니까? 아니면 제가 잘못했는지 말해 줄 수 있습니까? URL이 아니라 HTTP 본문 내용으로 전달 된 값을 얻어야합니다.

답변

0

AJAX 통화를 위해 다음을 시도해 볼 수 있습니까?

$.ajax({ 
    type: "POST", 
    url: "data/info/put", 
    data: 'key='+encodeURIComponent(value), 
    dataType: "text" 
}); 

나는 당신의 구체적인 예와 조합 및 설정의 무리를 시도하고,이 안정적으로 (PUT에서 POST로 요청 유형을 contentType의 사양을 제거하고 변경하여, 즉) 예상대로 데이터를 전송하는 유일한 하나 . 또한 PUT은 모든 브라우저에서 지원되지 않으므로 POST 대신 사용해야하는 중요한 이유가 없으면 사용하지 않아야합니다.

+0

방금 ​​제안한 내용을 시도했지만 제대로 작동하지 않습니다. "데이터"속성에 지정하는 것은 HTTP 본문으로 가야합니다. 그리고 "contentType"의 값이 무엇인지는 전혀 지정하지 않아도 상관 없습니다. – oradyvan

+0

WebKit 구현에 버그가있는 것 같습니다. 이미 버그 리포트를 Apple의 bugtracker에 게시했으며 지금까지는 아직 Open 상태입니다. 문제가 곧 출시 될 iOS 버전에서 해결되기를 바랍니다. – oradyvan