【问题标题】:To understand a line of jQuery了解一行jQuery
【发布时间】:2009-08-22 04:07:00
【问题描述】:

下面一行是什么意思?

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

【问题讨论】:

    标签: php jquery button


    【解决方案1】:

    如果你把它翻译成简单的英文这个代码:

    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属性的值。”

    在您的情况下,“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') }
    

    【讨论】:

      【解决方案2】:

      post

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

      在这种情况下加载 delete_a_question.php

      attr

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

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

      函数(数据)

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

      live

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

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

      【讨论】:

      • 我应该在数据中添加什么? Question_id?对我来说似乎没有必要。
      • 只有 post 函数的第一个参数是强制性的。因此,如果您不需要 question id 参数,请将其删除。
      【解决方案3】:

      $.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”。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 感谢您指出这一点!同样的问题仍然存在。我现在弹出我的index.php 的源代码。
        【解决方案5】:

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

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

        $_GET['question_id']
        

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

        $_POST['question_id']
        

        改为。

        【讨论】:

          猜你喜欢
          • 2010-11-21
          • 2011-08-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-26
          • 2019-02-19
          相关资源
          最近更新 更多