Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Получить функцию JavaScript (PHP, AJAX, jQuery) (https://javascript.ru/forum/jquery/35221-poluchit-funkciyu-javascript-php-ajax-jquery.html)

Sinot 04.02.2013 12:27

Получить функцию JavaScript (PHP, AJAX, jQuery)
 
Приветствую всех.

Можно с помощью jQuery и $.ajax() получить JavaScript.
Код:

$.ajax({
 url: './scipt.js',
 type: 'POST',
 dataType: 'script'});

script.js:
Код:

alert('123');

В итоге скрипт загрузится и сразу выполнится. (выведет "123")

Можно с помощью jQuery и $.ajax() получить данные (JSON).
Код:

$.ajax({
 url: './data.php',
 type: 'POST',
 success: function(data, textstatus){
  if(textstatus != 'success'){
   alert(textstatus);
   return;}

  alert(data.tmp);},
 dataType: 'json'});

data.php:
Код:

<?php
 $res['tmp']=123;
 echo json_encode($res);
?>

Получили данные и вывели. (выведет "123")

В общем ничего не обычного. А вот теперь вопрос, как поучить функцию JavaScript? Желательно (да чего уж необходимо) вместе с данными.
Должно получится что-то типа того:
Код:

var dat;
var func;
$.ajax({
 url: './data.php',
 type: 'POST',
 success: function(data, textstatus){
  if(textstatus != 'success'){
   alert(textstatus);
   return;}

  dat = data.dat;
  func = data.func;},
 dataType: 'json'});

//А далее обращаться как к функции
func();
alert(dat);

Возможно ли такое? И если да, то как? (пример, ссылки, хоть что-нибудь)

Спасибо.

B@rmaley.e><e 04.02.2013 12:34

Возможно. Просто напишите в .js файле её объявление
doCoolStuff = function() {
  alert('123');
}
Правда , в таком случае она станет глобальной, что не очень хорошо. Другой вариант — указать что-то вроде
(function() {
  return function() {
    alert('123');
  };
})()
, подгружать содержимое файла с помощью XHR, а потом выполнять eval
var fnc = eval(data)

animhotep 04.02.2013 12:35

если я прально понял то поможет eval

Sinot 04.02.2013 13:32

B@rmaley.e><e, animhotep,
Ох щи.
Я то копал в сторону передачи данных как объектов JavaScript, но похоже не судьба. А вот функции преобразования не догадался поискать.
Спасибо большое.

P.S. Для jQuery есть аналогичная функция $.globalEval(). В отличии от eval() выполняет заданный скрипт в глобальной области видимости. Но в моем случае она не пригодится.


Часовой пояс GMT +3, время: 16:33.