要理解一行jQuery

时间:2009-08-22 04:07:00

标签: php jquery button

以下行是什么意思?

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>"
 );

如果用户首先通过从GET获取question_id来点击链接,我试图删除一个问题。但是,我还没有设法让jQuery代码工作。我得到以下弹出窗口,问题没有删除。

在使用一个(解决问题并将$_GET更改为$_POST之后,我现在以弹出式this code获取。

5 个答案:

答案 0 :(得分:2)

如果您将其翻译成普通英语,请输入以下代码:

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

读取:

  

“使用参数'question_id'向'/codes/handlers/delete_a_question.php'异步发出POST请求,其值应该是'this'的'question_id'html属性的值。”

在您的情况下,“此”将指向被点击的链接以删除问题。它正在寻找名为“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 :(得分:1)

post

  

使用HTTP POST加载远程页面   请求。

在这种情况下,加载delete_a_question.php

attr

第二个参数是键/值对或将发送到服务器的.serialize()函数的返回值。

在这种情况下,点击的锚点的属性 question_id 将被采用

功能(数据)

是成功加载数据时要执行的回调函数

live

将处理程序绑定到匹配元素的事件。

在这种情况下,绑定点击事件处理程序

答案 2 :(得分: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的$ .post方法封装了一个$.ajax调用,类型选项设置为“POST”。

答案 3 :(得分:1)

您的解决方案与您的问题并不完全相关,但您错过了PHP中)行的pg_execute,这就是错误的原因。

答案 4 :(得分:1)

在我看来,问题出在PHP代码中,而不是jQuery -

您遇到的问题可能与您使用$ _GET方法获取参数“question_id”的事实有关:

$_GET['question_id']

仅从GET请求中检索参数。在这种情况下,您正在发出POST请求(使用jQuery.post()函数),因此您应该使用

$_POST['question_id']

代替。