Форум программистов, компьютерный форум, киберфорум
Наши страницы

Swift

Войти
Регистрация
Восстановить пароль
 
 
Konstatine
0 / 0 / 0
Регистрация: 29.06.2016
Сообщений: 35
#1

ParseJSON. Не заходит в условие - Swift

27.07.2016, 17:28. Просмотров 1401. Ответов 23
Метки нет (Все метки)

Доброго Всем здоровья!
Создаю страницу регистрации, посмотрел код в интернете, написал, но код нерабочий:

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
...
let myURL = NSURL(string: "http://www.z98759fe.beget.ru/UserRegister.php");
let request = NSMutableURLRequest(URL:myURL!);
request.HTTPMethod = "POST";
 
let postString = "email=\(UserEmail)&password=\(UserPassword)";
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding);
 
let task = NSURLSession.sharedSession().dataTaskWithRequest(request){data,respose,error in
let json = NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers, error: &err) as? NSDictionary
 
if let parseJSON = json {
...
В условие у меня почему-то не заходит, так как json равен nil.
Подскажите как быть? Уже три дня ломаю голову и в интернете ответа не нашел.
Благодарю.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.07.2016, 17:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос ParseJSON. Не заходит в условие (Swift):

JQuery.parseJSON - jQuery
Всем привет. Имеем скрипт php где формируестя страница и где имеютс встроенные javascript. Все работает притензий нет. Переножу...

TypeError: $.parseJSON is not a function - Node.js
Здравствуйте, вот не давно столкнулся с такой проблемой что пишет следующую ошибку: "C:\Program Files (x86)\PhpStorm...

JQuery.parseJSON Синтактическая ощибка в консоле браузера - jQuery
У меня стоит библиотека jQuery 2.1.3 и браузер показывает на jQuery.parseJSON = function( data ) { return JSON.parse( data + "" ); ...

Не заходит на сайты, но в Мэйл Агент заходит - Windows Vista
Здравствуйте! Возникла проблема с подключением к инету на Висте. подключаюсь к интернету все путем вроде. Значок подключения выходит. Но...

Не заходит в аккаунт гугл, не заходит в аккаунт яндекс - Спутниковая связь
Кто нибудь, помогите решить проблему! Не могу зайти на страницы яндекс и гугл при условии, что я нахожусь в своём аккаунте. Браузер (хром...

Условие if. Как сделать повтор выполнения if-а, если условие не удовлетворяет требованиям в данный момент - C#
Суть вопроса такова. В процессе работы программы запускается несколько потоков. Один из них выполняет бесконечный цикл, в котором каждую...

23
cin_cout
26 / 26 / 7
Регистрация: 06.10.2012
Сообщений: 119
28.07.2016, 17:55 #2
В работе с любым API начинаем с API, а не с клиента: надо понимать, что возвращает метод по указанному URL и что мы хотим получить.

Сервер не отвечает. Postman оба URL (и страницу регистрации, и корневой URL сервака) отфутболил.
0
Konstatine
0 / 0 / 0
Регистрация: 29.06.2016
Сообщений: 35
28.07.2016, 19:46  [ТС] #3
Спасибо за ответ, но, будьте добры, объясните подробней свою мысль. "Сервер не отвечает" - что вы имеете ввиду?
Итак, моя переменная json обращается к странице php и пытается ее распарсить. Но находя ее, не парсит, т.к. возвращает nil. Именно поэтому в условие
Objective-C
1
if let parseJSON = json
программа не заходит. Моя php страница ошибок не выдает. И я не могу понять, почему тогда nil.
Спасибо.
0
Митя800
55 / 56 / 14
Регистрация: 13.07.2015
Сообщений: 187
28.07.2016, 22:11 #4
Если запрос выполняется корректно, мы попадаем в блок, так? Проверяем наличие ошибки в параметре error или смотрим код ответа в respose, всё нормально? идем дальше.
Смотрите, в строке 10, метод передает ссылку на err, проверяем на ошибку, нормально? идем дальше.
В той же строке идет кастинг NSDictionary, ваш json является объектом? может здесь нужен массив?
проверяйте свой json-ответ на соответствие стандарту http://www.json.org/

Дальше только маги догадок поймут что в вашем коде или сервере не так
1
cin_cout
26 / 26 / 7
Регистрация: 06.10.2012
Сообщений: 119
29.07.2016, 00:10 #5
Вот дословный ответ от Postman'a

" Could not get any response
There was an error connecting to http://www.z98759fe.beget.ru.
Why this might have happened:
The server couldn't send a response:
Ensure that the backend is working properly"

То есть сервер не то что 403 или 404 присылает, чему еще можно было бы радоваться, он вообще не отвечает.
1
Konstatine
0 / 0 / 0
Регистрация: 29.06.2016
Сообщений: 35
31.07.2016, 11:18  [ТС] #6
cin_cout, спасибо за помощь! Но я ошибся в написании сайта. http://www.z98759fe.bget.ru вместо http://www.z98759fe.beget.ru
Мой сайт прописан и в программе, он отвечает, файл php возвращает правильные данные..но в условие так и не заходит.
0
Konstatine
0 / 0 / 0
Регистрация: 29.06.2016
Сообщений: 35
31.07.2016, 11:29  [ТС] #7
Митя800, хотелось бы сказать что error возвращает nil, как и положено. А результат response на картинке:
0
Миниатюры
ParseJSON. Не заходит в условие  
Konstatine
0 / 0 / 0
Регистрация: 29.06.2016
Сообщений: 35
31.07.2016, 14:25  [ТС] #8
Я даже попробовал поменять условие..но все-равно не заходит. Уже сил никаких нет. Помогите!
0
Миниатюры
ParseJSON. Не заходит в условие  
Митя800
55 / 56 / 14
Регистрация: 13.07.2015
Сообщений: 187
01.08.2016, 11:25 #9
Цитата Сообщение от Konstatine Посмотреть сообщение
хотелось бы сказать что error возвращает nil, как и положено. А результат response на картинке:
Цитата Сообщение от Konstatine Посмотреть сообщение
Я даже попробовал поменять условие..но все-равно не заходит. Уже сил никаких нет. Помогите!
а что содержит переменная err после сериализации data? Пробовали просто посмотреть, что содержится в data (сырые данные), а вывести просто стринговое значение?

"JSON"-сервера соответствует стандарту описания JSON?
0
kabudasay
3 / 3 / 1
Регистрация: 13.04.2015
Сообщений: 51
01.08.2016, 17:03 #10
я делал вот так попробуй по моему примеру


Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
//Create new user in Mysql
            let url = NSURL(string:"http://sitename.ru/xxx.php")!
            
            //Request to this file
            let request = NSMutableURLRequest(URL:url)
            //Method to pass data
            request.HTTPMethod = "POST"
            
            //Body to appended to url
            let body = "username=\(usernameTxt.text!.lowercaseString)&password=\(passwordTxt.text!)&email=\(emailTxt.text!)&fullname=\(firstnameTxt.text!)%20\(lastnameTxt.text!)"
           
            //request body
            request.HTTPBody = body.dataUsingEncoding(NSUTF8StringEncoding)
            //launching
            NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: { (data:NSData?, response:NSURLResponse?, error:NSError?) in
                
                if error == nil{
                    //send request to comunicate back to ui
                    dispatch_async(dispatch_get_main_queue(), {
                        do{
                            //get json result
                            let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSDictionary
                            //assing json to new var parseJSON in guard/secured way
                            guard let parseJSON = json else {
                                print("Error while parsing")
                                return
                            }
                            
                            //Get id from pase JSON dictionary
                            let id = parseJSON["id"]
                            
                            //Succesfully registered
                            if id != nil
                            {
                                //save info we reciwed from our host
                                NSUserDefaults.standardUserDefaults().setObject(parseJSON, forKey: "parseJSON")
                                user = NSUserDefaults.standardUserDefaults().valueForKey("parseJSON") as? NSDictionary
                                
                                dispatch_async(dispatch_get_main_queue(), {
                                    appDelegete.login()
                                    
                                })
                                return 
                            }
                                
                            //Error
                            else{
                                dispatch_async(dispatch_get_main_queue(), {
                                    let message = parseJSON["message"] as! String
                                    appDelegete.infoView(message: message, color : colorSmoothRed)
                                })
                                return
                            }
                            
                        }
                        catch{
                            dispatch_async(dispatch_get_main_queue(), {
                                let message = String(error)
                                appDelegete.infoView(message: message, color : colorSmoothRed)
                            })
                            return
                        }
                        
                    })
                    
                }else{
                    //if unable to proceed request
                    
                    dispatch_async(dispatch_get_main_queue(), {
                        let message = error!.localizedDescription
                        appDelegete.infoView(message: message, color : colorSmoothRed)
                    })
                    return
                }
            }).resume()

Главное если используешь dispatch_async не забудь ресюмить !

Добавлено через 3 минуты
let postString = "email=\(UserEmail)&password=\(UserPassword)";

смущает строчка ???

http://www.z98759fe.beget.ru

как вы выборку делаете ???

типо http://z98759fe.bget.ru/UserRegister...&password=test

я пробую так но он ни каких ошибок не возвращает ! точнее ответа ни какого ... покажите сторону сервера

Добавлено через 3 минуты
а да вместо

Objective-C
1
2
3
4
5
6
 dispatch_async(dispatch_get_main_queue(), {
                                let message = String(error)
                                appDelegete.infoView(message: message, color : colorSmoothRed)
                            })
                            return
                        }

напишите что то типо

Objective-C
1
print ("Caught an error: \(error)")
1
Konstatine
0 / 0 / 0
Регистрация: 29.06.2016
Сообщений: 35
01.08.2016, 17:04  [ТС] #11
Спасибо Вам! Сейчас попробую разобраться в вашем коде.
Моя строчка не смущает Текст не передаю (".text"?) Наверно еще зеленый по части написания кода в Swift. Ткните носом))
0
kabudasay
3 / 3 / 1
Регистрация: 13.04.2015
Сообщений: 51
01.08.2016, 17:07 #12
вы попробуйте сначало по ссылке создать юзера в бд

примерно так
http://z98759fe.bget.ru/UserRegister...&password=test

Добавлено через 2 минуты
вот моя обработка

на стороне сервера


PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<?php
// STEP 1. Declare parms of user inf
// if GET or POST are empty
if (empty($_REQUEST["username"]) || empty($_REQUEST["password"]) || empty($_REQUEST["email"]) || empty($_REQUEST["fullname"])) {
    $returnArray["status"] = "400";
    $returnArray["message"] = "Missing required information";
    echo json_encode($returnArray);
    return;
}
 
// Securing information and storing variables
$username = htmlentities($_REQUEST["username"]);
$password = htmlentities($_REQUEST["password"]);
$email = htmlentities($_REQUEST["email"]);
$fullname = htmlentities($_REQUEST["fullname"]);
 
// secure password
$salt = openssl_random_pseudo_bytes(20);
$secured_password = sha1($password . $salt);
 
 
 
// STEP 2. Build connection
// Secure way to build conn
$file = parse_ini_file("mysql.ini");
 
// store in php var inf from ini var
$host = trim($file["dbhost"]);
$user = trim($file["dbuser"]);
$pass = trim($file["dbpass"]);
$name = trim($file["dbname"]);
 
// include access.php to call func from access.php file
require ("secure/access.php");
$access = new access($host, $user, $pass, $name);
$access->connect();
 
 
 
// STEP 3. Insert user information
$result = $access->registerUser($username, $secured_password, $salt, $email, $fullname);
 
// successfully registered
if ($result) {
    
    // get current registered user information and store in $user
    $user = $access->selectUser($username);
    
    // declare information to feedback to user of App as json
    $returnArray["status"] = "200";
    $returnArray["message"] = "Successfully registered";
    $returnArray["id"] = $user["id"];
    $returnArray["username"] = $user["username"];
    $returnArray["email"] = $user["email"];
    $returnArray["fullname"] = $user["fullname"];
    $returnArray["ava"] = $user["ava"];
 
 
    
    // STEP 4. Emailing
    // include email.php
    require ("secure/email.php");
 
    // store all class in $email var
    $email = new email();
 
    // store generated token in $token var
    $token = $email->generateToken(20);
 
    // save inf in 'emailTokens' table
    $access->saveToken("emailTokens", $user["id"], $token);
 
    // refer emailing information
    $details = array();
    $details["subject"] = "Email confirmation on appArshansky";
    $details["to"] = $user["email"];
    $details["fromName"] = "Alexandr Arshansky";
    $details["fromEmail"] = "fullmetalbrain@gmail.com";
 
    // access template file
    $template = $email->confirmationTemplate();
 
    // replace {token} from confirmationTemplate.html by $token and store all content in $template var
    $template = str_replace("{token}", $token, $template);
 
    $details["body"] = $template;
 
    $email->sendEmail($details);
    
 
} else {
    $returnArray["status"] = "400";
    $returnArray["message"] = "Could not register with provided infomraiton";
}
 
 
// STEP 5. Close connection
$access->disconnect();
 
 
// STEP 6. Json data
echo json_encode($returnArray);
 
 
 
?>


тут и возвращение статусов тоже есть !
0
Konstatine
0 / 0 / 0
Регистрация: 29.06.2016
Сообщений: 35
01.08.2016, 17:08  [ТС] #13
Ошибка. "Missing required field". Как-будто пустое поле передаю.
0
kabudasay
3 / 3 / 1
Регистрация: 13.04.2015
Сообщений: 51
01.08.2016, 17:09 #14
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
про текст это пол дела ! вы же собираете все в строку ! это раз далее мутация идет это два сейчас swift смысла нет смотреть мой код 100% рабочий ! тестируйте php через адресную строку ! а потом уже собирайте свифт !
1
Konstatine
0 / 0 / 0
Регистрация: 29.06.2016
Сообщений: 35
01.08.2016, 17:12  [ТС] #15
А почему php возвращает ошибку как-будто пустое поле передаем? То есть где ошибка в адресной строке? Не подскажите?
0
01.08.2016, 17:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2016, 17:12
Привет! Вот еще темы с ответами:

Условие в Delphi 2010, нужно сделать условие на TDBEDIT - Delphi БД
Подскажите пожалуйста, у меня есть два эдита и одна кнопка, мне нужно сделать условие что при нажатии на кнопку, если эдиты пустые выдавал...

Почему выполняется условие else, если выполнилось условие if? - JavaScript
При вводе буквы, которое есть в переменной word, по идеи, если такой буквы нету, то должно выдать сообщение, то, что **Такой буквы нету**. ...

Условие в условие - отправка на почту текста - PHP
На сайте в html - форма &lt;/br&gt; &lt;h1&gt;Оборудование&lt;/h1&gt; &lt;/br&gt; &lt;table id=&quot;table_container&quot;&gt; &lt;tr id=&quot;tr_image_&quot;...

Если не выполняется условие в if, то не попадает в условие в else, а попадает сразу в блок catch - C#
Всем привет) Решил выучить язык C#... наткулся на простенький пример ниже! если не выполняется if, не попадаю в else, а попадаю сразу в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru