2009-08-22 19 views
0

以下行是什麼意思?瞭解jQuery的一行

jQuery.post('/codes/handlers/delete_a_question.php', 
{ question_id: jQuery(this).attr('question_id') } 

語境中HEAD,

jQuery('a.delete_question').live('click', function(){ 
    jQuery.post('/codes/handlers/delete_a_question.php', 
    { question_id: jQuery(this).attr('question_id') }, 
     function(data){ 
      alert ("Output of the delete.php -page: " + data); 
             // `data` is probably unnecessary 
    }) 
}); 

我在/codes/delete_a_question.php處理器,

$dbconn = pg_connect("host=localhost port=5432 dbname=noa user=noa password=123"); 
$result = pg_prepare ($dbconn, "delete_question_query", 
    "DELETE FROM questions 
    WHERE question_id = $1" 
); 
$result = pg_execute ($dbconn, "delete_question_query", array ($_GET['question_id'])); 
header("Location: /codes/index.php?successful_removal"); 

HTML,

echo ("<a href='#' class='delete_question'" 
     . " id=question_id'" . $question_id . "'" // to have question_id777 
     . ">delete</a>" 
); 

我想刪除一個問題,如果用戶點擊首先由gett創建一個鏈接從GET獲取question_id。但是,我沒有設法讓jQuery代碼工作。我得到以下彈出窗口並且問題沒有被刪除。

我現在得到一個彈出this code解決問題後,一個(和改變$_GET$_POST

回答

2

如果你把它翻譯成簡單易懂的英語驗證碼:

jQuery.post('/codes/handlers/delete_a_question.php', 
{ question_id: jQuery(this).attr('question_id') } 

寫着:

「通過異步POST請求 '/codes/handlers/delete_a_question.php' 與參數' question_id'誰的價值應該是'this'的'question_id'html屬性的值。「

在你的情況下,'this'會引用被點擊的鏈接來刪除一個問題。它正在尋找一個名爲'question_id'的屬性,它不是錨標籤的有效HTML屬性(或XHTML)屬性。這可能會導致問題。

在鏈接標記的哪裏存儲問題ID?如果您使用的是XHTML,那麼您可以使用「rel」屬性,誰的工作是定義錨點與其鏈接的關係(在這種情況下,它可能是鏈接和要刪除的問題之間的關係)。

所以改變這樣的:

<a href="#" class="delete_question" question_id="123">delete</a> 

要這樣:

<a href="#" class="delete_question" rel="123">delete</a> 

,然後在你的JavaScript/jQuery的改變這一點:

{ question_id: jQuery(this).attr('question_id') } 

這樣:

{ question_id: jQuery(this).attr('rel') } 
1

post

負載使用HTTP POST請求 遠程頁面。

在這種情況下負載delete_a_question.php

attr

第二個參數是鍵/值對或將要發送到服務器的.serialize()函數的返回值。

在這種情況下,屬性question_id點擊的錨的

功能(數據)

回調函數當數據被成功加載將被執行。

live

結合一個處理程序,以用於匹配元素的事件。

在這種情況下,綁定了一個點擊事件處理程序

+0

**我應該如何處理數據?** Question_id?這對我來說似乎沒有必要。 – 2009-08-22 04:46:58

+0

只有post函數的第一個參數是強制性的。所以,如果你不需要問題ID參數,然後刪除它。 – rahul 2009-08-22 04:48:18

1

$.post方法簽名是:

jQuery.post(url, [data], [callback], [type]) 

因此,在這個行:

jQuery.post('/codes/handlers/delete_a_question.php', 
{ question_id: jQuery(this).attr('question_id') } 

第一串參數是發佈請求將被髮送到的URL,並且第二個是包含數據作爲鍵/值對的對象。第三個(你的代碼出現在下一行)是一個回調函數。唯一的強制性參數是第一個。

JQuery's $。post方法將type選項設置爲「POST」來封裝$.ajax調用。

1

您的解決方案與您的問題並不完全相關,但您在PHP中的pg_execute行上缺少),這就是錯誤的含義。

+0

**感謝您指出!**同樣的問題仍然存在。我現在彈出我的'index.php'的源代碼。 – 2009-08-22 04:55:24

1

它看起來對我來說,問題是在PHP代碼,而不是jQuery的 -

您有可能與這樣的事實,你所得到的參數「question_id」使用$ _GET方法的問題:

$_GET['question_id'] 

它只從GET請求中檢索參數。在這種情況下,您正在發出POST請求(使用jQuery.post()函數),因此您應該使用

$_POST['question_id']