рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореЗрд░реЗ рд╕рд╛рдордиреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рд╣реБрдИ - рдПрдХ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдирд╛ рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рддрд╛рдХрд┐ рдЗрд╕реЗ рддреГрддреАрдп-рдкрдХреНрд╖ рд╕рд╛рдЗрдЯреЛрдВ рдкрд░ рд░рдЦрд╛ рдЬрд╛ рд╕рдХреЗред
рд╕реЗрд╡рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ - рд╕рд╛рдЗрдЯ "рд╣рд░ рджрд┐рди рдХреЗ рд▓рд┐рдП рд╕реНрдорд╛рд░реНрдЯ рд╢рдмреНрдж" рдЕрдкрдиреА рддрд░рд╣ рдХрд╛ рдкрд╣рд▓рд╛ рд╢реИрдХреНрд╖рд┐рдХ рд╕рдВрд╕рд╛рдзрди рд╣реИред рд╡реНрдпрд╛рдкрдХ рдЬрдирддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдЬреНрдЮрд╛рдд рд╢рдмреНрдж рд╣рд░ рджрд┐рди рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ рдФрд░ RuNet рдореЗрдВ "рд╕реНрдорд╛рд░реНрдЯ" рд╢рдмреНрджреЛрдВ рдХрд╛ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рд╢рдмреНрджрдХреЛрд╢ рдмрдирд╛рддреЗ рд╣реИрдВред рд╣рд░ рд╕реБрдмрд╣
Everydayword.ru рдкрд░ рдЖрдПрдВ рдФрд░ рдЕрдкрдиреА рд╢рдмреНрджрд╛рд╡рд▓реА рдмрдврд╝рд╛рдПрдВред
рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рд╕рд╡рд╛рд▓ рдЙрдард╛ рдХрд┐ рдбреЗрдЯрд╛ рдХреИрд╕реЗ рдФрд░ рдХрд┐рд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдореЗрд░реА рдкрд╕рдВрдж
JSON рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ
AJAX рдкрд░ рдЧрд┐рд░ рдЧрдИред
рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
рдкреАрдПрдЪрдкреА
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдПрдХ рдкреЗрдЬ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЕрдЬрд╛рдХреНрд╕ рдЕрдиреБрд░реЛрдз рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдореЙрдбреНрдпреВрд▓ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд╣реБрдХ_рдореЗрдиреВ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ (рдФрд░ рд╡рд╣ рдлрд╝рдВрдХреНрд╢рди рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдбреЗрдЯрд╛ рд▓реМрдЯрд╛рдПрдВрдЧреЗ:
function mymodule_menu() { $items['output'] = array( 'page callback' => 'mymodule_output',
рд╣рдо
Drush рдЯреВрд▓ "
Drush cc all
" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрд╢ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рддреЗ рд╣реИрдВ, рдкреЗрдЬ
yoursite.ru/output рдкрд░ рдЬрд╛рдПрдБрдЖрдкрдХреЛ рдпрд╣рд╛рдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд╛рда рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░
{"title":"Your title","body":"Your body"}
рдЬреЗ рдПрд╕
рдЦреИрд░, рдЬреИрд╕реЗ рдХрд┐ json рдмрдирддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ url рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рдЖрдк js рд▓рд┐рдЦрдирд╛ рднреА рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
$(document).ready(function () { $.ajax({ url: 'http://yoursite.ru/output', dataType: "json", success: function(data) { console.log(data) } }); });
рдкрд╛рд░реНрд╕рд┐рдВрдЧ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдФрд░ рдЕрд╕реНрдерд╛рдпреА рд╕реБрдзрд╛рд░
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛ рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рддреНрд░реБрдЯрд┐ рд╣рдорд╛рд░реА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реА рд╣реИ:
XMLHttpRequest cannot load yoursite.ru/output. Origin your-test-site.ru is not allowed by Access-Control-Allow-Origin.
рдмреЗрд╢рдХ, рдЖрдк рдмрд╕ yoursite.ru рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП ajax рдХреЛ рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рд░ рдХреЛрдИ рдЬреЛ рд╣рдорд╛рд░реЗ рд╡рд┐рдЬреЗрдЯ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рд╡рд╣ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рд╣рд╛рд▓рд╛рдБрдХрд┐,
crossDomain
рд╡рд┐рдзрд┐ рдореЗрдВ
crossDomain
рддрд░рд╣ рдПрдХ рд╕реЗрдЯрд┐рдВрдЧ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓
crossDomain
рдбреЗрдЯрд╛
jsonp (dataType: 'jsonp')
рдбреЗрдЯрд╛
jsonp (dataType: 'jsonp')
рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рд╣рдо рдЕрдкрдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рддреЗ рд╣реИрдВ:
$(document).ready(function() { $.ajax({ url: 'http://yoursite.ru/output', crossDomain: true, dataType: 'jsonp', success: function(data) { console.log(data) } }); });
рдпрд╣ рд╡рд╣рд╛рдБ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╣рдо рдПрдХ рдирдИ рддреНрд░реБрдЯрд┐ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВ:
Uncaught SyntaxError: Unexpected token :
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╣рдорд╛рд░реЗ рдкреГрд╖реНрда рдХреЛ JS рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред
рдЪреБрдкрдЪрд╛рдк jQuery.ajax () рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЕрдзреНрдпрдпрди
рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрдкрдиреЗ рдХреЛрдб рдХрд╛ рдЖрдзреБрдирд┐рдХреАрдХрд░рдг
рдХрд░ рд░рд╣реЗ рд╣реИрдВ ред
рдЕрдВрддрд┐рдо, рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕рдВрд╕реНрдХрд░рдгред
рдЬреЗ рдПрд╕
$.ajax({ url: 'http://yoursite.ru/output?callback=?', crossDomain: true, dataType: 'jsonp', success: function(data) { var code = '<div class="widget-title">' + data.title + '</div>' code += '<div class="widget-body">"' + data.body + '"</div>' $('#widget-content').html(code) } }); });
рдкреАрдПрдЪрдкреА
function mymodule_output() { drupal_add_http_header('Content-Type', 'application/x-javascript'); $data = array( 'title' => t('Your title'), 'body' => t('Your body'), ); $json = drupal_json_encode($data); echo $_GET['callback'] . "($json);"; drupal_exit(); }
рд╡рд┐рдЬреЗрдЯ рдкреНрд▓реЗрд╕рдореЗрдВрдЯ
рдПрдХ рд╡рд┐рдЬреЗрдЯ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
- рдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ
- рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдХреБрдЫ рддреИрдпрд╛рд░ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реАрдПрд╕рдПрд╕ рдлрд╝рд╛рдЗрд▓ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ
рдЙрд╕ рдЬрдЧрд╣ рдкрд░ рдЬрд╣рд╛рдВ рдЖрдк рд╡рд┐рдЬреЗрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдПрдХ div рдмрдирд╛рдПрдВ