我在IOS应用中使用PromiseKit与Rails RESTful后端进行通信,
并且有一些只返回标题的调用,比如在后端执行head 200
。
我所尝试的是:
我使用[NSURLConnection POST:url formURLEncodedParameters:parameters]
将数据发布到后端,后端确实收到数据并使用head 200
消息进行响应,但PromiseKit报告了以下异常:
2014-07-31 11:19:39.501 HelloPOS [13223:60b]错误 Domain = NSCocoaErrorDomain Code = 3840"操作不能 完成。 (可可误差3840。)" (没有值。)UserInfo = 0xa4c5a90 {NSDebugDescription =没有值。,PMKURLErrorFailingDataKey = {length = 1,capacity = 16,bytes = 0x20}, PMKURLErrorFailingURLResponseKey = {URL: http://SOME_APP.SOME_HOST.com/api/v1/sales.json} {状态代码:200, 标题{ "缓存控制" =" max-age = 0,private,must-revalidate&#34 ;; 连接="保持活力&#34 ;; " Content-Length的" = 1; "内容类型" =" application / json&#34 ;; Date =" Thu,31 Jul 2014 03:19:25 GMT&#34 ;; Etag =" \" 7215ee9c7d9dc229d2921a40e899ec5f \"&#34 ;; Server =" WEBrick / 1.3.1(Ruby / 2.0.0 / 2014-05-08)&#34 ;; Via =" 1.1 vegur&#34 ;; " X-的Content-Type-选项" = nosniff; " X框,选项" = SAMEORIGIN; " X - 请求-ID" =" 5a1c1aa1-4b42-41ea-8397-a5df8fa956bc&#34 ;; " X-运行" =" 0.013359&#34 ;; " X-XSS-保护" =" 1;模式=块&#34 ;; }}
这可能是因为仅标题响应没有正文,并且导致错误
PS:我已经更改了异常消息中的URL
答案 0 :(得分:3)
问题是服务器声称响应的JSON内容长度为1个字节。但是响应没有解析为JSON,因此承诺的PromiseKit错误。
PromiseKit没有提供忽略响应的机制,但如果您无法修复服务器以提供正确的响应,您可以轻松地在此处做出自己的承诺。
#import <OMGHTTPURLRQ.h>
- (PMKPromise *)myPromise:(id)args {
id rq = [OMGHTTPURLRQ POST:url:args];
id q = ;
return [PMKPromise new:^(PMKPromiseFulfiller fulfill, PMKPromiseRejecter reject){
[NSURLConnection sendAsynchronousRequest:rq queue:q completionHandler:^(id rsp, id data, NSError *urlError) {
if (urlError) {
reject(urlError)
} else {
fulfill(nil);
}
}];
}];
}
编辑:PromiseKit现在适用于这种特定情况,因此您不应再出现此特定错误。