если запрос ajax вводит кусок кода javascript, я должен ожидать, что он будет исполняемым? - PullRequest
4 голосов
/ 24 августа 2010

если запрос ajax вводит кусок кода javascrpt, могу ли я ожидать его выполнения?

например, если запрос ajax вводит другой запрос ajax и помещает его на страницу, как это сделать?я делаю это функциональным?

$("select#select_host").change(function(){
    $.ajax({
  url: '<?php echo $sn; ?>/admini/list/is_active/'+$(this).val(),
              type: 'get',
              asynch: 'false', 
              dataType: 'text' ,
              success: function(response) {           
              $("#list_hosts").html(response);
              }   


        });  

    });

Ответы [ 4 ]

1 голос
/ 28 августа 2010

Перефразируя Иана Малкольма, это не так много, как вы можете , так и то, должны ли вы .

Есть два способа выполнить полученный кодот сервера, и это обычно зависит от того, откуда этот код.

Javascript имеет функцию под названием eval(), которая принимает строку и выполняет ее как Javascript.Основная проблема заключается в том, когда вы не можете быть уверены, что содержит эта строка.В мире интернет-безопасности большинство людей утверждают, что вы можете никогда не быть уверенным во входящих данных, и поэтому вам следует никогда использовать eval для входящих данных.

Другой метод - JSONP .Этот метод позволяет вам получать данные из удаленных источников.Это делается путем генерации тега <SCRIPT>, который извлекает удаленный Javascript.Ваш вызов источника JSONP обычно включает функцию обратного вызова, которая вызывается при получении данных JSONP, предоставляя доступ к локальному коду.

Не зная точно, чего вы хотите достичь, я не хочуЧтобы сделать какие-либо предположения, но позвольте мне сделать некоторые предложения.

Вызов кода по требованию с сервера может немного тяжелым.Я не могу думать о многих (читай - any ) сценариях, в которых вызов на заказ функций с сервера будет лучшим подходом.Однако я могу представить сценарий, в котором у вас есть большой набор потенциальных функций, которые вы, возможно, захотите выполнить, и вы не хотите загружать их все в браузер одновременно.Я бы предложил два подхода:

  1. Выполнить функции на сервере.Просто отправьте вам данные на сервер в каком-либо формате, и они вернут набор результатов.Оставьте обработку на сервере
  2. Если вам нужна функция, которой в данный момент нет в браузере, загрузите файл сценария, содержащий эту функцию, а затем вызовите функцию в своем Javascript.Думайте об этих файлах как о динамически загружаемых библиотеках, к которым вы обращаетесь по мере необходимости.Вы ограничены своим собственным сервером, используя этот метод, который повышает безопасность (если вы уверены, что ваш собственный сервер не будет отправлять вредоносный код.

Короче, я бы сказал, что дизайнэто требует, чтобы вы немедленно взяли текст с сервера и выполнили его, так как код может указывать на проблему в этом проекте. Но вы не пришли сюда для проверки проекта, так что, надеюсь, эти предложения помогут вам найти хороший подход.

1 голос
/ 24 августа 2010

Техника, о которой вы говорите, называется JSONP и постоянно используется для обхода политики same-origin * .

То, что вы будете делать, это в основном вставка <script> тегов с фактическим Javascript для вызова AJAX.

Надеюсь, это направит вас в правильном направлении.

0 голосов
/ 24 августа 2010

У вас есть несколько способов добраться до цели.Я бы посоветовал вам поближе взглянуть на jQuery.live .С обработчиком .live вам не нужно повторно вычислять возвращаемый код.Это делается с помощью jQuery.Мой второй совет: используйте JSON.Из PHP вы можете вернуть массив с помощью json_encode () и использовать массив с помощью jQuery.each.Таким образом, вы можете написать список без eval (); -)

("select#select_host").change(function(){

    var data = {'is_active':$(this).val()};
    // Use jquery.post, it´s simple and plain
    jQuery.post('/admini/list', data, function (JSON) {

        jQuery.each(JSON.data, function(key, list)
        {
          $("#list_hosts").append('<li>'+list+'</li>');
        });
      }, "json");
0 голосов
/ 24 августа 2010

Как правило, вы должны иметь возможность вызывать «eval ()» с результирующими данными в качестве параметра, и он будет запускать код.ОДНАКО, использование eval сильно не рекомендуется по соображениям безопасности.Например, не забудьте НИКОГДА НИКОГДА оценивать код, который вы получаете от пользователя.

Вы должны искать другие способы сделать то, что выхочу сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...