JavaScript / PHP ile verimli bir `Sil`-düğmesine inşa etmek

5 Cevap php

Bir soru kaldırmak için Which of the following code is better in building a delete-eylem?

1 My code

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

2 Stack Overflow's code

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

I do not understand completely how Stack Overflow's delete -button works, since it points to no URL. The id apparently can only be used by CSS and JavaScript. Stack Overflow apparently uses JavaScript for the action.

  1. How can you put start the delete-eylem JavaScript ile CSS dosyasının içeriğine dayalı?
  2. How can you start a SQL delete -command by JavaScript? Bunu PHP ile bunu nasıl biliyorum, ama JavaScript tarafından.

5 Cevap

Bir kullanıcı arayüzü yanlışlıkla bağlantı tarama ve kullanıcı müdahalesi olmadan mesajı silmek olabilir gibi bir yöntem güvenli değildir. Googlebot örneğin, o yapabilir, ya da kullanıcının tarayıcı tepki süresini hızlandırmak için sayfaları önceden almak olabilir.

Dan RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1

9.1.1 Safe Methods

Implementors should be aware that the software represents the user in their interactions over the Internet, and should be careful to allow the user to be aware of any actions they might take which may have an unexpected significance to themselves or others.

In particular, the convention has been established that the GET and HEAD methods SHOULD NOT have the significance of taking an action other than retrieval. These methods ought to be considered "safe". This allows user agents to represent other methods, such as POST, PUT and DELETE, in a special way, so that the user is made aware of the fact that a possibly unsafe action is being requested.

Naturally, it is not possible to ensure that the server does not generate side-effects as a result of performing a GET request; in fact, some dynamic resources consider that a feature. The important distinction here is that the user did not request the side-effects, so therefore cannot be held accountable for them.

Bunu yapmanın doğru yolu, bir düğmesini kullanarak POST aracılığıyla bir formu göndermek veya silme yapmak için JavaScript kullanmak ya da budur. JavaScript tüm sayfa yeniden yüklenmesi neden, gizli bir formu göndermek olabilir, ya da sayfayı yeniden olmadan silme yapmak için Ajax kullanabilirsiniz. Her iki şekilde de, önemli nokta inadvertantly bir habersiz kullanıcı ajan tarafından tetiklenen olabilir sayfanızdaki çıplak bağlantıları olan kaçınmaktır.

"Delete_post_" ile başlayan çapa üzerinde bir tıklama olay bağlamak ve bir Ajax isteği başlatmak için kullanabilirsiniz.

$("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 With the above $.post(), JavaScript code calls a page like delete.php?id=3425 in the background. If delete.php contains any output it will be available to you in the data variable.

Bu jQuery kullanıyor. http://docs.jquery.com/How_jQuery_Works bu konuda her şeyi okuyun.

Bir href="..." niteliği devamsızlık oldukça haklısınız, bağlantı JavaScript olmadan işe yaramaz.

Genellikle, JavaScript yapar ne AJAX sunucusuna ulaşmak için kullanmak: yani Asynchronous JavaScript ve XML bulunuyor. Bu kişiler, bir sunucu, sadece doğrudan bir sayfasını ziyaret ederek olur, ancak tarayıcı ne gösteren sayfa değiştirmeden, arka planda yapar gibi.

Bu sunucu tarafı sayfası daha sonra gerekli her türlü işlem yapabilirsiniz. Her iki durumda da, PHP işi değil, JavaScript işi var.

Verimliliği hakkında konuşurken temel fark, geleneksel modelde, nereye {ile tam "sonucu," bütün bir sayfa oluşturmak gerekir isteği bitirdikten sonra bir PHP sayfası POST, form, [(1)]}, ve tüm görünür sayfa içeriğiyle.

AJAX ile bir arka plan isteği yapıyoruz Ancak, ziyaretçinin sonucunu görür asla. Aslında, genellikle bile okunabilir bir sonuç değil. Bu modelde, sadece JavaScript sayfayı değiştirmek için kullanabileceğiniz new bilgi aktarmak gerekir.

AJAX genellikle geleneksel modelin "daha verimli" olarak görülüyor nedeni budur: daha az veri ileri geri hareket etmesi gereken ve tarayıcı (genellikle) sayfasının bir parçası olarak verileri göstermek için daha az iş yapmak gerekiyor. Lütfen "delete" örnekte, sadece iletişim "= 777 delete" ve daha sonra belki de "başarı = true" (sadece biraz basitleştirmek) - böyle büyük bir etki için iletişim kurmak için bilgi küçük bir miktar!

Her ne yığın taşması olur Sil bağlantısını tıklayın JavaScript tarafından yakalanmış ve bir Ajax isteği mesajı silmek için yapılıyor olmasıdır, uygulama nasıl inşa edildiğini bağlıdır.

Kolayca seçici kural (lar) ile eşleşen tüm unsurları tıklamaları yakalamak için JavaScript kütüphanesini kullanabilirsiniz.

Sonra SQL işi yapmak için PHP komut dosyası için bir istek göndermek için Ajax kullanabilir.

Bir yan not olarak, ideal girdilerini silerek için GET kullanmak yerine POST, ama bu başka bir hikaye olmaz.