рдирдорд╕реНрдХрд╛рд░ рдкреНрд░рд┐рдп рдмрд╛рдЬ! рдореИрдВ рдпрд╣ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╡реЗрдм рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рдирдИ-рдирдИ рднрд╛рд╖рд╛ QML рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдХреИрд╕реЗ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ, рдХреНрдпреВрдПрдордПрд▓ рдПрдХ рдШреЛрд╖рдгрд╛рддреНрдордХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреИрд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╣реИ рдЬреЛ рдХреНрдпреВрдЯреА рдврд╛рдВрдЪреЗ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдХреНрдпреВрдЯреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЧрдВрднреАрд░ рд╣реИрдВ рдФрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдореБрдЦреНрдп рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдмрдврд╝рд╛рд╡рд╛ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╕рд╣рд┐рдд, C ++ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓рд┐рдП рдмрд┐рдирд╛ рдмрд╣реБрдд рд╕реА рдЪреАрдЬреЗрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред
рд╡реЗрдм рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпрд╛рдВ рддреЗрдЬреА рд╕реЗ рд╣рдорд╛рд░реЗ рдЬреАрд╡рди рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░ рд░рд╣реА рд╣реИрдВ, рд╣рдо рдЕрдХреНрд╕рд░ рд╡рд┐рднрд┐рдиреНрди рд╡реЗрдм рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдХрднреА-рдХрднреА рдПрдХ рдЕрд▓рдЧ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рднрд┐рдиреНрди рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореЛрдмрд╛рдЗрд▓ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ред
рдЙрд╕ рдХреНрдпреВрдЯреА 5.1 рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЬрд┐рд╕рдХрд╛ рдЕрд▓реНрдлрд╛ рд╕рдВрд╕реНрдХрд░рдг рдкрд┐рдЫрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдПрдВрдбреНрд░реЙрдЗрдб рдФрд░ рдЖрдИрдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдорд░реНрдерди рд╢рд╛рдорд┐рд▓ рд╣реИ, рдпрд╣ рд╡рд┐рд╖рдп рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХреНрдпреВрдЯреА рдХреЛ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЗрд╕рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдЖрдк рд╡реАрдХреЗ рдПрдкреАрдЖрдИ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдХреНрдпреВрдПрдордПрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рд╡реЗрдм рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдмрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВ рдХреНрдпреВрдЯреА 5.0.2 рдХреЗ рдирд╡реАрдирддрдо рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдкрд╣рд▓реЗ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред
XMLHttpRequest рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХрдИ рдкрд╛рдардХреЛрдВ рдиреЗ рддрдХрдиреАрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ AJAX (рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдПрдХреНрд╕рдПрдордПрд▓)ред рдпрд╣ рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдФрд░ рдкреГрд╖реНрда рдХреЛ рдкреБрди: рд▓реЛрдб рдХрд┐рдП рдмрд┐рдирд╛ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдХрд░рдг рд╣реИрдВ, XMLHttpRequest рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЪреВрдВрдХрд┐ QML рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ-рдЬреИрд╕реА рднрд╛рд╖рд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╛рддрд╛рд╡рд░рдг рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд╕рдорд╛рди рд╣реИ, XMLHttpRequest рднреА рдореМрдЬреВрдж рд╣реИред рдмрд╛рдж рдореЗрдВ рдкрд╛рда рдореЗрдВ рдореИрдВ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рдореЗрдВ рдЗрд╕рдХрд╛ рдирд╛рдо рднреА рд▓рд┐рдЦреВрдВрдЧрд╛ - XHRред
рджрд░рдЕрд╕рд▓, рдпрд╣ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╣рдореЗрдВ рдХреНрдпрд╛ рджреЗрддрд╛ рд╣реИ? рдпрд╣ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ (рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рднреА рд╕рдорд░реНрдерд┐рдд рд╣реИ) HTTP рдЕрдиреБрд░реЛрдзред рдЕрдкрдиреЗ рдирд╛рдо рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдпрд╣ рдЖрдкрдХреЛ XML рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рди рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдерд╛ред QML рдЗрдВрдЬрди рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ: GET, POST, HEAD, PUT рдФрд░ DELETEред рдЕрд╕рд▓ рдореЗрдВ, рд╣рдо рдкрд╣рд▓реЗ рджреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдХреНрдпреВрдПрдордПрд▓ рдореЗрдВ рдПрдХреНрд╕рдПрдЪрдЖрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдиреБрд░реЛрдз рдХрд┐рд╕реА рднреА рд╣реЛрд╕реНрдЯ рдХреЛ рднреЗрдЬреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рд╣реИрдВред
XMLHttpRequest рдкреНрд░рдХреНрд░рд┐рдпрд╛
XHR рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИред
1. рдПрдХ рдПрдХреНрд╕рдПрдЪрдЖрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ:
var request = new XMLHttpRequest()
2. рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдиреБрд░реЛрдз рдХреЗ рдкреНрд░рдХрд╛рд░ (рдЙрд░реНрдл рдПрдЪрдЯреАрдЯреАрдкреА рд╡рд┐рдзрд┐), рдкрддреЗ рдФрд░, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдкреИрд░рд╛рдореАрдЯрд░
[1] рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
request.open('GET', 'http://site.com?param1=value1¶m2=value2')
рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдЕрдиреБрд░реЛрдз рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИ, рджреВрд╕рд░рд╛ URL рд╣реИред рдПрдХ GET рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП, рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдпрд╣рд╛рдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрдиреНрд╣реЗрдВ рдкреНрд░рддреАрдХ рдХреЗ рд╕рд╛рде рдкрддреЗ рд╕реЗ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реБрдП '?'ред рдкреИрд░рд╛рдореАрдЯрд░ 'рдФрд░' рд╡рд░реНрдг рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рд╣реИрдВред
рдкреЛрд╕реНрдЯ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рд╣рдо рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
3. рдЕрдиреБрд░реЛрдз рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рд╕реЗрдЯ рдХрд░реЗрдВред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╣рдореЗрдВ рдЕрдиреБрд░реЛрдз рдкреВрд░рд╛ рд╣реЛрдиреЗ рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдо рдпрд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЕрдиреБрд░реЛрдз рдХреЗ рдЕрдВрдд рдореЗрдВ, рд░реЗрдбреАрд╕реНрдЯреЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ XMLHttpRequest.DONE рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛ (рдореВрд▓реНрдпреЛрдВ рдкрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП,
[2] рджреЗрдЦреЗрдВ)ред
request.onreadystatechange = function () { if (request.readyState === XMLHttpRequest.DONE) { if (request.status === 200) { console.log(request.responseText) } else { console.log("HTTP request failed", request.status) } } }
рд╣рдорд╛рд░рд╛ рдЕрдирд╛рдо рдХрд╛рд░реНрдп рд╣рд░ рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рддреИрдпрд╛рд░ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред рд╣рдо рдЕрдиреБрд░реЛрдз рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдо рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рд╣реБрдЖ рдерд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рдлрд▓рддрд╛ рдХреЛрдб (200) рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред HTTP рдПрдХ рдкрд╛рда рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИ рдФрд░ рдХреЛрдбреЛрдВ рдХреЗ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдкрд╛рда рд╡рд┐рд╡рд░рдг рднреА рдкреНрд░реЗрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рдЕрдиреБрд░реВрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде statusText рд╕рдВрдкрддреНрддрд┐ рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╕реНрдЯреНрд░рд┐рдВрдЧ "рдУрдХреЗ" рд╣реИ:
if (request.statusText === 'OK')
рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрдерд┐рддрд┐ рдФрд░ рд╕реНрдЯреЗрдЯрд╕рдЯреИрдХреНрд╕ рдореЗрдВ HTTP рд╕реНрдЯреЗрдЯрд╕ рдХреЛрдб (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 404 рдФрд░ "рдиреЙрдЯ рдлрд╛рдЙрдВрдб", рдХреНрд░рдорд╢рдГ) рдХрд╛ рдХреЛрдб рдФрд░ рдЯреЗрдХреНрд╕реНрдЯ рд╡рд┐рд╡рд░рдг рд╣реЛрдЧрд╛ред
4. рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВред
request.send()
POST рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдЕрдиреБрд░реЛрдз рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
request.send('param1=value1¶m2=value2')
рдХреНрд╡реЗрд░реА рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рд╕рднреА рд╡рд░реНрдгреЛрдВ рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рдорд╛рди рджреЛрдиреЛрдВ рдХреЛ рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рд╡рд┐рд╢реЗрд╖ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдбреАрдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдПрдиреНрдХреЛрдбрд░реНрдХреЛрдореНрдкреЛрдиреЗрдВрдЯ () рдФрд░ рдбрд┐рдХреЛрдбреНрдпреВрд░рд┐рдХреЛрдореНрдкреЛрдиреЗрдВрдЯ ()ред рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг:
request.send('%1=%2'.arg(encodeURIComponent(param)).arg(encodeURIComponent(value)))
рдпрд╣ рдПрдиреНрдХреЛрдбреЗрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЖрдЧреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ "+ 20" рдЕрдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рдЕрдиреБрдХреНрд░рдо "% 20" (рдпрд╛рдиреА, рдПрдиреНрдХреЛрдбреЗрдб рд╕реНрдкреЗрд╕) рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреНрд░рдорд╢рдГ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рд╕реЗ рдкрд╣рд▓реЗ, рд╡рд┐рдкрд░реАрдд рдХрд░реЗрдВред
рдЖрдорддреМрд░ рдкрд░, рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рд╕рд░рд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рдПрдХ рд╕рд░рдгреА рднреА рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреБрдЫ рдореИрд▓рд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджреЛ рдорд╛рдиреЛрдВ рдХреЗ рдмрд░рд╛рдмрд░ рдХрд╛ рдПрдХ рд╕рд░рдгреА рднреЗрдЬрдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
request.send('params[]=value1¶ms[]=value2')
рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдирд░рдХ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдСрдмреНрдЬреЗрдХреНрдЯ (!) рдХреЛ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдХрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдкрд░ рдпрд╣ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ :)
POST рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдбреЗрдЯрд╛ рдХреЛ рди рдХреЗрд╡рд▓ рдЕрдиреБрд░реЛрдз рдкреИрд░рд╛рдореАрдЯрд░, рдмрд▓реНрдХрд┐ рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдореЗрдВ рднреА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╣реА рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдЖрдХрд╛рд░ (рд╕рд╛рдордЧреНрд░реА-рд▓рдВрдмрд╛рдИ) рд╕реЗрдЯ рдХрд░реЗрдВред рдРрд╕рд╛ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
request.setRequestHeader('Content-Type', 'application/json') var params = { param1: value1, param2: value2 } var data = JSON.stringify(params) request.setRequestHeader('Content-Length', data.length) request.send(data)
рдпрд╣рд╛рдБ JSON QML рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╕реНрддреБ рд╣реИ рдЬреЛ рдЗрд╕ рдкреНрд░рд╛рд░реВрдк
[3] рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬрд┐рд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╣рдо рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд╡рд╣ рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ JSON рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ - рдареАрдХ рд╣реИ, JSON рд╣реЗрд▓рдореЗрдЯред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдЕрдиреБрд░реЛрдз рдкреИрд░рд╛рдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЖрдПрдЧрд╛ - рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрдм рдЬрдм рд╣рдордиреЗ рдЖрд╡рд╢реНрдпрдХ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдо VKontakte рдХреЗ рд╕рд╛рде рдЕрднреНрдпрд╛рд╕ рдФрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдВрдЧреЗред
рдорд┐рддреНрд░реЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрди рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдФрд░ рдЕрдиреНрдп рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЗрд╢рд╛рд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдПрдХ рдорд┐рддреНрд░ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЗрд╕ рд╢реНрд░реЗрдгреА рдореЗрдВ рдЖрддрд╛ рд╣реИред рд╣рдо рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рджреЛрд╕реНрддреЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП XHR рднреЗрдЬрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдирд╛рдо рдФрд░ рдЙрдирдХреЗ рдЕрд╡рддрд╛рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдб рдбрд┐рд╕реНрдкреНрд▓реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдиреЛрдЯ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрджрд┐ рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдпрд╛ рдПрд░реЗ рдХреЛ рдореЙрдбрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореЙрдбрд▓ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ рдХреЗ рдмрдЬрд╛рдп рдореЙрдбрд▓рдбреИрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣рд┐рд╕реНрд╕рд╛ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рд╡реАрдХреЗ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкрддрд╛ рд╣реИ:
api.vk.com/method ред рд╣рдо рдкреНрд░рд╛рдкреНрдд рдкрддреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ (рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА
[4] рдореЗрдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ), рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдорд┐рддреНрд░ рд╣реИред рд╡рд┐рдзрд┐ред рдЗрд╕ рдкрддреЗ рдкрд░ рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ POST рдпрд╛ GET рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрддреНрддрд░ JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЖрдПрдЧрд╛ред рд╣рдореЗрдВ рдпреВрдЬрд░ рдЖрдИрдбреА рдХреЛ рдпреВрдЖрдИрдбреА рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдлрд╝реАрд▓реНрдб рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рднреА рд╣рдо рдлрд╝реЛрдЯреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ photo_medium рдкрд╛рд╕ рдХрд░реЗрдВрдЧреЗ рдФрд░ рддрд╛рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдЖрдХрд╛рд░ рди рд╣реЛред
рдиреАрдЪреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрд░реЛрдд рдХреЛрдб рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреА рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреА рд╣реИред
import QtQuick 2.0 Rectangle { id: main property int userId: XXX property var friends width: 320 height: 640 color: 'skyblue' function getFriends() { var request = new XMLHttpRequest() request.open('POST', 'https://api.vk.com/method/friends.get') request.onreadystatechange = function() { if (request.readyState === XMLHttpRequest.DONE) { if (request.status && request.status === 200) { console.log("response", request.responseText) var result = JSON.parse(request.responseText) main.friends = result.response } else { console.log("HTTP:", request.status, request.statusText) } } } request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded') request.send('fields=photo_medium&uid=%1'.arg(main.userId)) } ListView { id: view anchors.margins: 10 anchors.fill: parent model: friends spacing: 10 delegate: Rectangle { width: view.width height: 100 anchors.horizontalCenter: parent.horizontalCenter color: 'white' border { color: 'lightgray' width: 2 } radius: 10 Row { anchors.margins: 10 anchors.fill: parent spacing: 10 Image { id: image height: parent.height fillMode: Image.PreserveAspectFit source: modelData['photo_medium'] } Text { width: parent.width - image.width - parent.spacing anchors.verticalCenter: parent.verticalCenter elide: Text.ElideRight renderType: Text.NativeRendering text: "%1 %2".arg(modelData['first_name']).arg(modelData['last_name']) } } } } Component.onCompleted: { getFriends() } }
рдореИрдВрдиреЗ рдЙрддреНрддрд░ рдореЗрдВ рдХреНрдпрд╛ рдЖрдПрдЧрд╛ рдХреЗ рдХрдВрд╕реЛрд▓ рдкрд░ рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рджрд┐рдпрд╛, рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдЕрдЧрд░ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИред
рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓рд╛рдирд╛, рдпрджрд┐ рдПрдХ рдорд╛рдиреНрдп рдЖрдИрдбреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд┐рддреНрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ:

рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдмрдбрд╝реА рдХрдард┐рдирд╛рдИ XHR рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдареАрдХ рд╣реИред рдЖрдЗрдП рдЗрд╕реЗ рдЬрд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдФрд░ рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рд╕рд░рд▓ рдХрд░реЗрдВред
XMLHttpRequest рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд╛ рд╕рд░рд▓реАрдХрд░рдг
рдПрдХреНрд╕рдПрдЪрдЖрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдЪреБрдиреМрддрд┐рдпрд╛рдВ рд╣реИрдВред
1. рдЕрдиреБрд░реЛрдз рдкреИрд░рд╛рдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдбреЗрдЯрд╛ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЗрд╕ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдпреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдореЗрдВ рдХрдИ рдСрдкрд░реЗрд╢рди рд╣реЛрдВрдЧреЗ рдЬреЛ рдЯреБрдХрдбрд╝реЛрдВ рд╕реЗ рдЕрдиреБрд░реЛрдз рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЧреЛрдВрдж рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рднреВрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╕рдордп рдПрдиреНрдХреЛрдбрд░реНрдХреЛрдореНрдкреЛрдиреЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдВрдЬрд┐рдпреЛрдВ рдФрд░ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдПрдирдХреЛрдб рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рд▓рд┐рдЦрд╛ рдерд╛ред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рдмреЛрдЭрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝реАрд▓реНрдб рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдореИрдВрдиреЗ рдПрдХ рдЫреЛрдЯреА рд╕реА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓рд┐рдЦреА, рдЬреЛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреА рд╣реИ, рдЬреЛ рдХрд┐ рд╕рдм рдХреБрдЫ рдПрдирдХреЛрдб рдХрд░рддреА рд╣реИ, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрдХ рддреИрдпрд╛рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреИрджрд╛ рдХрд░рддреА рд╣реИ рдЬрд┐рд╕реЗ рддреБрд░рдВрдд рднреЗрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдлрд╝рдВрдХреНрд╢рди рднреА рд╣реИ рдЬреЛ рдХреНрд╡реЗрд░реА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдбрд┐рдХреЛрдб рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдирд╕реЗ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рд╕рд░рд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рдПрдХ рд╕рд░рдгреА рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд░реНрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ)ред рдЖрдк рдЗрд╕реЗ рдпрд╣рд╛рдБ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
github.com/krnekit/qml-utils/blob/master/qml/URLQuery.js ред
2. рдЕрдиреБрд░реЛрдз рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдбреЗрдЯрд╛ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реЗрдбрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓рд┐рдЦрд╛ рд╣реИ рдЬреЛ рдПрдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рдХреЗ XHR рдХреЛ рднреЗрдЬрдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣ рдХрд┐рд╕реА рднреА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд░ рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдЕрднреА рднреА рдПрдХ рд╣реА "рдПрдкреНрд▓рд┐рдХреЗрд╢рди / x-www-form-urlencoded" рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ GET рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдкрдХреЛ POST рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╕рд╛рдордЧреНрд░реА-рд▓рдВрдмрд╛рдИ рднреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЧрдгрдирд╛ рдФрд░ рд╕реЗрдЯ рдХреА рдЬрд╛рдПрдЧреАред рдпрд╣ рдЕрдиреБрд░реЛрдз рдкреНрд░рдХрд╛рд░, URL, рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди (рд╡реИрдХрд▓реНрдкрд┐рдХ) рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЕрдиреБрд░реЛрдз рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ (рд╡реИрдХрд▓реНрдкрд┐рдХ)ред рдлрд╝рдВрдХреНрд╢рди рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдиреБрд░реЛрдз рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрд╡рдпрдВ рдпрд╛ рд╢реВрдиреНрдп рджреЗрддрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рдпрд╣рд╛рдБ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
github.com/krnekit/qml-utils/blob/master/qml/XHR.jsрджреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рд░рд▓ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рд╕рднреА рдХреЛрдб рдирд╣реАрдВ рджрд┐рдП рд╣реИрдВ, рд╣рдо рдХреЗрд╡рд▓ рдЙрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред
рдлрд╝рд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╣рдо рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ (рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рд╛рдЗрд▓реЗрдВ рдЙрд╕реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╣реИрдВ рдЬреИрд╕реЗ qml рдлрд╝рд╛рдЗрд▓):
import 'URLQuery.js' as URLQuery import 'XHR.js' as XHR
рд╣рдо рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдирд╛рдо рд╕реНрдерд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдо рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
XHR рднреЗрдЬрдиреЗ рд╡рд╛рд▓рд╛ рдлрд╝рдВрдХреНрд╢рди рдЕрдм рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
function getFriends() { var params = { fields: 'photo_medium', uid: main.userId } function callback(request) { if (request.status && request.status === 200) { console.log("response", request.responseText) var result = JSON.parse(request.responseText) main.friends = result.response } else { console.log("HTTP:", request.status, request.statusText) } } XHR.sendXHR('POST', 'https://api.vk.com/method/friends.get', callback, URLQuery.serializeParams(params)) }
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди, рдЬрд┐рд╕реЗ рдЕрдиреБрд░реЛрдз рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡рдпрдВ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рд╣рдо рд╕реНрд╡рдпрдВ рдХреЛ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддреЗ рд╣реИрдВ, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реАрд░реАрдЬрд╝рдкрд░рд╛рдореЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдирддреАрдЬрддрди, рдХреЛрдб рдХрд╛ рдЖрдХрд╛рд░, рдХреЛрдИ рдХрд╣ рд╕рдХрддрд╛ рд╣реИ, рдмрджрд▓ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдВрд░рдЪрд┐рдд рдФрд░ рд╕рдордЭ рдореЗрдВ рдЖ рдЧрдпрд╛ рд╣реИред
рдореИрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЛрдб рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реВрдВрдЧрд╛ред рдпрджрд┐ рд╡реЗ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИрдВ, рддреЛ рдЖрдк рдПрдордЖрдИрдЯреА рд▓рд╛рдЗрд╕реЗрдВрд╕ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХреНрдпреВрдПрдордПрд▓ рд╕реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡реА.рдХреЗ.
рд╕рднреА рддрд░реАрдХреЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдирддреАрдЬрддрди, рд╣рдореЗрдВ рддрдерд╛рдХрдерд┐рдд рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЯреЛрдХрди, рдЬрд┐рд╕реЗ рд╣рдо VKontakte рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред рддрд╛рдХрд┐ рд╣рдо рд▓реЙрдЧ рдЗрди рдХрд░ рд╕рдХреЗрдВ, рдЖрдкрдХреЛ VKontakte рдкрд░ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рдпрд╣рд╛рдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
vk.com/editapp?act=create рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рдлрд┐рд░ рд╣рдо рдПрдХ рдЕрдиреБрд░реЛрдз рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдЗрд╕рдХреА рдЖрдИрдбреА рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред
1. рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рддрд░реАрдХреЗ
рдЪреВрдВрдХрд┐ рд╣рдо рдПрдХ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рджреЛ рддрд░реАрдХреЗ, рджреЛрдиреЛрдВ рдХреА рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо рдмреБрд░рд╛рдИ рдЪреБрдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ :)
1. рдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рд╛рдзрд┐рдХрд░рдгред рдПрдХ HTTP рдЕрдиреБрд░реЛрдз рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрддреЗ рдкрд░ рд▓реЙрдЧрд┐рди рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рд╣реЛрдЧреА рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЯреЛрдХрди рдпрд╛ рддреНрд░реБрдЯрд┐ рд╡рд┐рд╡рд░рдг рд╣реЛрдЧрд╛ред
рдлрд╛рдпрджреЗ:
рдиреБрдХрд╕рд╛рди:
- рдЖрд╡реЗрджрди рдХреЗ рдЧреБрдкреНрдд рдХреЛрдб рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ (рдЗрд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╕реАрд╡рди рднреА рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ), рддрджрдиреБрд╕рд╛рд░ рдЗрд╕рдХреЗ рд░рд┐рд╕рд╛рд╡ рдХрд╛ рдЦрддрд░рд╛ рд╣реИред
- рдпрд╣ рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧреАред рдЬрдм рдЖрдк рдПрдХ рдирдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЕрдиреБрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╕рдорд░реНрдерди рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред
2. OAuth рдкреНрд░рд╛рдзрд┐рдХрд░рдгред рдЗрд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдЙрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд▓реЙрдЧрд┐рди рдкреГрд╖реНрда рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реЛред рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд╛рдж, рдХрд┐рд╕реА рдЕрдиреНрдп рдкреГрд╖реНрда рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рд╣реЛрдЧрд╛ рдФрд░ рд╡рд░реНрддрдорд╛рди URL рдореЗрдВ рдПрдХ рдЯреЛрдХрди рдпрд╛ рддреНрд░реБрдЯрд┐ рд╡рд┐рд╡рд░рдг рд╣реЛрдЧрд╛ред VKontakte рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдореБрдЦреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрддрд╛ рд╣реИред
рдлрд╛рдпрджреЗ:
- рдореБрдЦреНрдп рдФрд░ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕рднреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реИред
- рдЧреБрдкреНрдд рдХреБрдВрдЬреА рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
- OAuth рдПрдХ рдорд╛рдирдХ рд╣реИ рдФрд░ рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдлреЗрд╕рдмреБрдХ рдкрд░ рднреА рд▓реЙрдЧ рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдиреБрдХрд╕рд╛рди рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред
- рдЖрдкрдХреЛ рд╡реАрдХреЗ рдкреГрд╖реНрда рдЦреЛрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╛ рддреЛ рдЗрд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╡рд┐рдВрдбреЛ рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдпрд╛ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЦреЛрд▓реЗрдВред
- рдЪреВрдВрдХрд┐ рд╣рдо рдкреЗрдЬ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдЖрдкрдХреЛ QtWebkit рдФрд░ рдЙрд╕рдХреЗ рд╕рд╛рде рдЦреАрдВрдЪрдиреЗ рд╡рд╛рд▓реА рд╣рд░ рдЪреАрдЬ рдХреЛ рдЦреАрдВрдЪрдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд╡рдЬрди рдкрд░ рдбрд╛рд▓ рджреЗрдЧрд╛ред
- рдЖрдкрдХреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ URL рдХреЛ рдмрджрд▓рдиреЗ, рдЗрд╕ URL рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдФрд░ рдЙрд╕рдореЗрдВ рд╕реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рд░реЛрдХрдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдХрд┐ XHR рд╕реЗ рдХреБрдЫ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред
2. рдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рд╛рдзрд┐рдХрд░рдг
рдмреЗрд╢рдХ, рдореИрдВрдиреЗ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдХрд┐ рд╡реЗ рдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди VKontakte рд╕рдорд░реНрдерди рдиреЗ рдкрд╣рд▓реЗ рдЗрддреНрдореАрдирд╛рди рд╕реЗ рдореБрдЭрд╕реЗ рдкреВрдЫрд╛ рдХрд┐ рдореБрдЭреЗ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдлрд┐рд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдмрдВрдж рд╣реЛ рдЧрдпрд╛ :( рддреЛ, рдЪрд▓реЛ рдПрдХ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓реЗрддреЗ рд╣реИрдВред рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
function login() { var params = { grant_type: 'password', client_id: 123456, client_secret: 'XXX', username: 'XXX', password: 'XXX', scope: 'audio' } function callback(request) { if (request.status && request.status === 200) { console.log("response", request.responseText) var result = JSON.parse(request.responseText) if (result.error) { console.log("Error:", result.error, result.error_description) } else { main.authToken = result.auth_token
рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╣рдо рдкреИрд░рд╛рдореАрдЯрд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЙрдирдореЗрдВ рдореИрдВрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдСрдбрд┐рдпреЛ рд░рд┐рдХреЙрд░реНрдб рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЧреБрдВрдЬрд╛рдЗрд╢ рдкреИрд░рд╛рдореАрдЯрд░)ред рддрдм рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди, рдЬреЛ рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрдВрд╕реЛрд▓ рдХреЛ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЯреЛрдХрди рдмрдЪрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдзреЛрдВ рдкрд░ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдмрд╕, рдореИрдВ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдЫреЛрдбрд╝
рджреВрдВрдЧрд╛ :
vk.com/dev/auth_direct ред
3. OAuth рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдгред
рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд▓реЙрдЧрд┐рди рд╡реЗрдм рдкреЗрдЬ рджрд┐рдЦрд╛рдирд╛ рд╣реЛрдЧрд╛ред QtQuick рдореЗрдВ рдПрдХ WebView рдШрдЯрдХ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ WebKit рдЗрдВрдЬрди рдХреЛ QML рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ URL рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╕рдлрд▓ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдиреБрд░реЛрдз рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рдПрдХ рдЯреЛрдХрди рдпрд╛ рдПрдВрдХрд░ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реЛрдЧрд╛
[5] ред
рдЗрд╕ URL рдХреЛ рдкрд╛рд░реНрд╕ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо URLQuery рд╕реЗ parseParams рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рдкреВрд░реЗ URL рдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╣рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдорд┐рд▓рддрд╛ рд╣реИред
рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдШрдЯрдХ рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рд╣реИред
LoginWindow.qml:
import QtQuick 2.0 import QtQuick.Window 2.0 import QtWebKit 3.0 import "URLQuery.js" as URLQuery Window { id: loginWindow property string applicationId property string permissions property var finishRegExp: /^https:\/\/oauth.vk.com\/blank.html/ signal succeeded(string token) signal failed(string error) function login() { var params = { client_id: applicationId, display: 'popup', response_type: 'token', redirect_uri: 'http://oauth.vk.com/blank.html' } if (permissions) { params['scope'] = permissions } webView.url = "https://oauth.vk.com/authorize?%1".arg(URLQuery.serializeParams(params)) } width: 1024 height: 768 WebView { id: webView anchors.fill: parent onLoadingChanged: { console.log(loadRequest.url.toString()) if (loadRequest.status === WebView.LoadFailedStatus) { loginWindow.failed("Loading error:", loadRequest.errorDomain, loadRequest.errorCode, loadRequest.errorString) return } else if (loadRequest.status === WebView.LoadStartedStatus) { return } if (!finishRegExp.test(loadRequest.url.toString())) { return } var result = URLQuery.parseParams(loadRequest.url.toString()) if (!result) { loginWindow.failed("Wrong responce from server", loadRequest.url.toString()) return } if (result.error) { loginWindow.failed("Error", result.error, result.error_description) return } if (!result.access_token) { loginWindow.failed("Access token absent", loadRequest.url.toString()) return } succeeded(result.access_token) return } } }
рд╣рдо рдЗрд╕ рдШрдЯрдХ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд▓реЙрдЧрд┐рди () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд▓реЙрдЧрд┐рди рдкреЗрдЬ рд▓реЛрдб рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдПрдХ URL рдкрд░
рдкреБрдирдГ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ
oauth.vk.com/blank.html рдкрддреЗ рдХреЗ рд░реВрдк рдореЗрдВ
рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдлрд┐рд░ 'рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ?' рдпрд╛ '#' рдкрд░рд┐рдгрд╛рдо рдЬрд╛рдПрдЧрд╛ред рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рдо рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдЕрдзрд┐рдХрд╛рд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рд╡рд╣рд╛рдВ рдХреБрдЫ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рддреЗ рд╕рдордп, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддрдХ рдкрд╣реБрдВрдЪ рдЕрдзрд┐рдХрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд╡рд╛рдж рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред
рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЬрдм рд╣рдо рд╕рд╣реА рдкрддреЗ рдкрд░ рдкрд╣реБрдВрдЪреЗ, рддреЛ рд╣рдордиреЗ onLadingChanged рд╣реИрдВрдбрд▓рд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ред рдпрд╣ рдПрдХ loadRequest рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╣рдореЗрдВ рд╡рд╣ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓рддреА рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕реЗ рдХрдИ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рдо рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдЬрдм рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реБрдИ рд╣реЛ, рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣рдо рдЙрдЪрд┐рдд рд╕рдВрдХреЗрдд рднреЗрдЬрддреЗ рд╣реИрдВ, рдпрд╛ рдЬрдм рд╡рд╛рдВрдЫрд┐рдд рдкреГрд╖реНрда рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдПрдХ рдЯреЛрдХрди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдпрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рд╕рдлрд▓ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреЗрдд рднреЗрдЬреЗрдВ, рдЕрдиреНрдпрдерд╛ рддреНрд░реБрдЯрд┐ рд╕рдВрдХреЗрддред
рдареАрдХ рд╣реИ, рдЕрдм рдЗрд╕ рд╡рд┐рдЬреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рд╕рдлрд▓ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрд╛рд░реНрдпрдХреНрд░рдо "рдкрд░реАрдХреНрд╖рдг" рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреА рдореБрдЦреНрдп рдореЗрдВ userId рд╕рдВрдкрддреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред
import QtQuick 2.0 import 'URLQuery.js' as URLQuery import 'XHR.js' as XHR Rectangle { id: main property int userId: XXX property var authToken width: 640 height: 320 function processLoginSuccess(token) { loginWindow.visible = false authToken = token setStatus() } function setStatus() { var params = { access_token: main.authToken, text: 'test' } function callback(request) { if (request.status == 200) { console.log('result', request.responseText) var result = JSON.parse(request.responseText) if (result.error) { console.log('Error:', result.error.error_code,result.error.error_msg) } else { console.log('Success') } } else { console.log('HTTP:', request.status, request.statusText) } Qt.quit() } XHR.sendXHR('POST', 'https://api.vk.com/method/status.set', callback, URLQuery.serializeParams(params)) } LoginWindow { id: loginWindow applicationId: XXX permissions: 'status' visible: false onSucceeded: processLoginSuccess(token) onFailed: { console.log('Login failed', error) Qt.quit() } } Component.onCompleted: { loginWindow.visible = true loginWindow.login() } }
рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рд▓реЙрдЧрд┐рди рд╡рд┐рдВрдбреЛ рджреЗрдЦреЗрдВрдЧреЗред рд▓реЙрдЧрд┐рди рдХреЗ рдмрд╛рдж, рдпрд╣ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдХреЛ рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрдВрд╕реЛрд▓ рдХреЛ рдкрд░рд┐рдгрд╛рдо рд▓рд┐рдЦрддрд╛ рд╣реИ рдФрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЕрдм рдПрдХ рдЯреЛрдХрди рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЕрдЧрд░ рд╣рдореЗрдВ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдПрдХреНрд╕реЗрд╕ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдпрд╛ рдЗрд╕рдХрд╛ рдЬреАрд╡рдирдХрд╛рд▓ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдЖ (рд╣рдо рд╕рдлрд▓ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдВрдЧреЗ)ред
рдФрд░ рдХреНрдпрд╛ рдЖрдк рдХреЗ рд▓рд┐рдП XMLHttpRequest рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдореИрдВ рдЖрдкрдХреЛ VKontakte рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ XHR рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд, рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рд╕реЗ рдПрдХ рдЫреЛрдЯреА рдХрд╣рд╛рдиреА рдмрддрд╛рдКрдВрдЧрд╛ред
рдХрд┐рд╕реА рддрд░рд╣ рдореЗрд░реЗ рд╕рд╣рдпреЛрдЧреА рдХрд╛ QML рдореЗрдВ XML рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдерд╛ред
QtQuick рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХрд╛ XmlListModel рд╣реИ рдЬреЛ рдореЙрдбрд▓ рдХреЗ рд░реВрдк рдореЗрдВ XML рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЦреАрдВрдЪ, рдкрд╛рд░реНрд╕ рдФрд░ рд░реЗрдВрдбрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЙрд╕реЗ рдЯрд╛рдЗрдк рдПрдХреНрд╕рдкреАрде рдХреА рдПрдХ рдХреНрд╡реЗрд░реА рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдореЙрдбрд▓ рднрд░рд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдереА рдХрд┐ XML рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рди рдХреЗрд╡рд▓ рдЙрди рддрддреНрд╡реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрд┐рдиреНрд╣реЗрдВ рдореЙрдбрд▓ рдореЗрдВ рдЪрдпрдирд┐рдд рдФрд░ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрд▓реНрдХрд┐ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред
рдХрдИ рд╕рдорд╛рдзрд╛рди рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВред рдЖрдк рджреЛ XmlListModel рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрд╕реНрдкрд╖реНрдЯ рдмреИрд╕рд╛рдЦреА рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ XML рдлрд╝рд╛рдЗрд▓ рдХреЛ рджреЛ рдмрд╛рд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдП (рдФрд░ рдЗрд╕реЗ рдЪреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)ред рдЖрдк Qt рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдХрдИ рдкрд╛рд░реНрд╕рд░ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╢реБрджреНрдз QML рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдереАред
рдЪреВрдВрдХрд┐ XMLHttpRequest рдХреЛ рдореВрд▓ рд░реВрдк рд╕реЗ XML рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ XML рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рд╣реИрдВред рддрджрдиреБрд╕рд╛рд░, рдЖрдк XML рдХреЛ рдЙрд╕рдХреЗ рдЯреВрд▓ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд░ рдЖрдк рдЙрд╕реА XML рдХреЛ XmlListModel рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╡рд╣рд╛рдВ рдЖрдк рди рдХреЗрд╡рд▓ URI, рдмрд▓реНрдХрд┐ XML рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рднреА рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
рддреЛ, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЕрдм XMLHttpRequest рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдпрд╣ рдирд╣реАрдВ рднреВрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдХреНрдпреЛрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдпрд╣ рдХрд┐ XML рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рднреА рд╣реИрдВред
рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛рд░рд╛рдВрд╢
QML рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдХрдИ рдЙрдкрдХрд░рдг рдЙрдкрд▓рдмреНрдз рд╣реИрдВред XMLHttpRequest рдЖрдкрдХреЛ HTTP рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдФрд░ рдЗрд╕ рддрд░рд╣ рд╡реЗрдм рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рд╛рде QML рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдПрдХреАрдХрд░рдг рдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред XHR рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП C ++ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЬрд┐рд╕рд╕реЗ рд╡рд┐рдХрд╛рд╕ рд╕рд░рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред