Как я могу получить значения JSON из моего скрипта PHP?
я получил nil
в моем ответе JSON.
Alamofire.request
работает. (то есть я получаю данные JSON в своем скрипте PHP.)
PHP скрипт работает. (т.е. я могу обработать входной JSON и сгенерировать правильную строку JSON, используя json_encode
.)
Вот код …
Swift:
Alamofire
.request(.POST, "http://www.myserver.com/from_swift.php", parameters: dicMyDictionary, encoding: ParameterEncoding.JSON)
.responseJSON {
(request, response, JSON, error) in
println("request: \(request)")
println("response: \(response)")
println("JSON: \(JSON)")
println("error: \(error)")
}
Результаты печати:
request: <NSMutableURLRequest: 0x7ff3b242de90> { URL: http://www.myserver/from_swift.php }
response: Optional(<NSHTTPURLResponse: 0x7ff3b2776c40> { URL: http://www.myserver/from_swift.php } { status code: 200, headers {
Connection = "Keep-Alive";
"Content-Type" = "application/json";
Date = "Fri, 16 Jan 2015 12:02:24 GMT";
"Keep-Alive" = "timeout=5, max=200";
Server = "Apache/2.2.29 (Unix)";
"Transfer-Encoding" = Identity;
"X-Powered-By" = "PHP/5.4.36";
} })
JSON: nil
error: Optional(Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Invalid value around character 0.) UserInfo=0x7ff3b380db80 {NSDebugDescription=Invalid value around character 0.})
PHP:
<?php
header('Content-Type: application/json');
... More code here ...
echo json_encode($aryOfStrings);
?>
Решение:
У меня была ошибка в моем скрипте PHP. В результате сообщение об ошибке передается обратно в ответе перед строкой JSON. В результате .responseJSON
правильно не распознал данные как JSON.
Чтобы помочь другим, когда вы получаете nil
в параметре ваших данных из .responseJSON
, устранение неполадок путем изменения .responseJSON
в .responseString
чтобы увидеть, если вы получите какие-либо результаты обратно в параметре данных. Например, когда я изменил на .responseString
Я видел следующее:
JSON: Optional("<br />\n<b>Strict Standards</b>: mysqli::next_result(): There is no next result set. Please, call mysqli_more_results()/mysqli::more_results() to check whether to call this function/method in <b>/home/xxx/public_html/from_swift.php</b> on line <b>115</b><br />\n{\"books\":[\"the hunger games\",\"mockingjay\"]}")
Обратите внимание, сообщение об ошибке перед строкой json. После того, как я исправил скрипт PHP и изменил обратно на .responseJSON
, это сработало…
Задача ещё не решена.
Других решений пока нет …