Чтобы эффективно создать кнопку `Delete` с помощью JavaScript / PHP - PullRequest
0 голосов
/ 21 августа 2009

Какой из приведенного ниже кода лучше при создании действия delete для удаления вопроса?

1 Мой код

<a href='index.php?delete_post=777>delete</a>

2 Код переполнения стека

<a id="delete_post_777>">delete</a>

Я не совсем понимаю, как работает кнопка удаления в Stack Overflow, поскольку она не указывает на URL. id, очевидно, может использоваться только CSS и JavaScript. Переполнение стека, очевидно, использует JavaScript для действия.

  1. Как можно запустить delete -действие на основе содержимого CSS-файла с помощью JavaScript?
  2. Как запустить команду удаления SQL с помощью JavaScript? Я знаю, как это можно сделать с помощью PHP, но не с помощью JavaScript.

Ответы [ 5 ]

7 голосов
/ 21 августа 2009

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

С RFC 2616: протокол передачи гипертекста - HTTP / 1.1

9.1.1 Безопасные методы

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

В частности, конвенция была Установлено, что ПОЛУЧИТЬ и ГОЛОВУ методы не должны иметь Важность принятия действий других чем поиск. Эти методы должны считаться "безопасным". Это позволяет пользователю агенты для представления других методов, такие как POST, PUT и DELETE, в особый способ, так что пользователь сделан осознавая тот факт, что возможно запрашивается небезопасное действие.

Естественно, невозможно убедитесь, что сервер не генерировать побочные эффекты в результате выполнение запроса GET; по факту, некоторые динамические ресурсы считают, что особенность. Важное различие вот что пользователь не запрашивал побочные эффекты, поэтому не может нести ответственность за них.

Правильный способ сделать это - отправить форму через POST с помощью кнопки или использовать JavaScript для удаления. JavaScript может отправить скрытую форму, вызывая перезагрузку всей страницы, или использовать Ajax для удаления без перезагрузки страницы. В любом случае, важным моментом является недопущение появления на вашей странице пустых ссылок, которые могут непреднамеренно быть инициированы неосведомленным пользовательским агентом.

5 голосов
/ 21 августа 2009

Свяжите событие клика на якорь, который начинается с «delete_post_» и используйте его для запуска Ajax-запроса.

$("a[id^='delete_post_']").click(function(e){
  e.preventDefault(); // to prevent the browser from following the link when clicked
  var id = parseInt($(this).attr("id").replace("delete_post_", ""));

  // this executes delete.php?questionID=5342, when id contains 5342
  $.post("delete.php", { questionID: id },
    function(data){
      alert("Output of the delete.php page: " + data);
    });

});

// UPDATE С указанным выше $.post() код JavaScript вызывает страницу, похожую на delete.php?id=3425 в фоновом режиме. Если delete.php содержит какой-либо вывод, он будет доступен вам в переменной данных.

Это использует jQuery. Читайте все об этом на http://docs.jquery.com/How_jQuery_Works.

1 голос
/ 22 августа 2009

URL, который вы ищете, находится в коде js. Лично у меня был бы идентификатор, который идентифицирует каждый тег с определенным сообщением, комментарием ... или чем-то еще, а затем имел бы class = "delete_something" на каждом, который затем отправлял бы в правильное место, используя javascript.

Вот так:

<a href="#" class="delete_post" id="post_111" title="Delete Post">Delete</a>

<script type="text/javascript">
jQuery('a.delete_post').live('click', function(){

    jQuery.post('delete.php', {id: jQuery(this).attr('id')}, function(data){
        //do something with the data returned
    })
});
</script>
1 голос
/ 21 августа 2009

Вы совершенно правы, если отсутствует атрибут href="...", ссылка не будет работать без JavaScript.

Обычно JavaScript использует AJAX для связи с сервером: это асинхронный JavaScript и XML. Он связывается с сервером, как если бы вы посещали страницу напрямую, но делает это в фоновом режиме, не меняя страницы, которую показывает браузер.

Эта страница на стороне сервера может затем выполнять любую необходимую вам обработку. В любом случае, это PHP, а не JavaScript.

Основное отличие при обсуждении эффективности заключается в том, что в традиционной модели, где вы POST заполняете форму на странице PHP, после завершения запроса вы должны отобразить всю страницу как "результат" вместе с * 1011. * и со всем видимым содержимым страницы.

Однако, когда вы выполняете фоновый запрос с AJAX, посетитель никогда не увидит результат. На самом деле, это обычно даже не читаемый человеком результат. В этой модели вам нужно только передать новую информацию, которую JavaScript может использовать для изменения страницы.

Вот почему AJAX обычно рассматривается как «более эффективный», чем традиционная модель: для перемещения данных вперед и назад требуется меньше данных, а браузеру (как правило) требуется меньше работы для отображения данных как части страница. В вашем примере «delete» единственное сообщение - «delete = 777», а затем, возможно, «success = true» (чтобы немного упростить) - небольшое количество информации для передачи для такого большого эффекта!

1 голос
/ 21 августа 2009

Все зависит от того, как построено ваше приложение, что происходит при переполнении стека, когда клик по ссылке для удаления перехватывается JavaScript и выполняется Ajax-запрос на удаление сообщения.

Вы можете использовать библиотеку JavaScript, чтобы легко ловить клики по всем элементам, которые соответствуют вашим правилам выбора.

Затем вы можете использовать Ajax для отправки запроса к сценарию PHP для выполнения работы SQL.

Кстати, в идеале вы бы не использовали GET для удаления записей, а скорее POST, но это уже другая история.

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