【问题标题】:ajax post within jquery onclickjquery onclick中的ajax帖子
【发布时间】:2013-12-12 12:34:28
【问题描述】:

我有一个按钮,它调用一个模式框来淡入屏幕,说从按钮发布的值然后淡出,这使用 jquery 可以正常工作,但我也希望在同一次单击时从按钮发送的值是发布到一个 php 函数,该函数要运行并且模态框仍然淡入淡出。

我只有这个让我的网站知道使用什么 js:

 <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" ></script>

我还是新手,很抱歉提出一个菜鸟问题,但这会允许 ajax 运行,还是仅适用于 jquery?

我正在尝试的当前脚本是:(根据回复编辑为正确格式,但现在什么都没有发生)

<script>
$('button').click(function() 
{

    var book_id = $(this).parent().data('id'),
    result = "Book #" + book_id + " has been reserved.";

    $.ajax
    ({ 
        url: 'reservebook.php',
        data: "book_id="+book_id,
        type: 'post',
        success: function()
        {
            $('.modal-box').text(result).fadeIn(700, function() 
            {
                setTimeout(function() 
                {
                    $('.modal-box').fadeOut();
                }, 2000);
            });
        }
    });
});
</script>

尽管这样,模态框甚至不会发生。

php 是,resersebook.php:

<?php

session_start();

$conn = mysql_connect('localhost', 'root', '');
        mysql_select_db('library', $conn);

    if(isset($_POST['jqbookID']))
    {
        $bookID = $_POST['jqbookID'];

        mysql_query("INSERT INTO borrowing (UserID, BookID, Returned) VALUES ('".$_SESSION['userID']."', '".$bookID."', '3')", $conn);
    }

?>

为了彻底,按钮是:

<div class= "obutton feature2" data-id="<?php echo $bookID;?>"><button>Reserve Book</button></div>

我是新手,我在这里查看了许多其他类似的问题,这就是我获得当前脚本的方式,但它不起作用。

不确定它是否重要,但只有模态框的脚本必须位于 html 正文的底部才能工作,不确定是否出于某种原因 ajax 需要位于顶部,但是模​​态框盒子行不通,只是一个想法。

【问题讨论】:

  • 危险:您使用的是an obsolete database API,应该使用modern replacement。您也容易受到SQL injection attacks的影响,现代 API 可以让您更轻松地从 defend 中获得。
  • 啊,谢谢,我一直被告知这一点,我一直想阅读并迁移过来。
  • 你真的不使用mysql_real_escape_string()htmlspecialchars()filter_input()吗?! SQL 注入只是一个问题。 &lt;?php echo $bookID;?&gt; 也会导致 XSS。

标签: php jquery html ajax


【解决方案1】:

试试这个。编辑为最终答案。

按钮

<div class= "obutton feature2" data-id="<?php echo $bookID;?>">
    <button class="reserve-button">Reserve Book</button>
</div>

脚本

<script>
$('.reserve-button').click(function(){

    var book_id = $(this).parent().data('id');

    $.ajax
    ({ 
        url: 'reservebook.php',
        data: {"bookID": book_id},
        type: 'post',
        success: function(result)
        {
            $('.modal-box').text(result).fadeIn(700, function() 
            {
                setTimeout(function() 
                {
                    $('.modal-box').fadeOut();
                }, 2000);
            });
        }
    });
});
</script>

reservebook.php

<?php
session_start();

$conn = mysql_connect('localhost', 'root', '');
mysql_select_db('library', $conn);

if(isset($_POST['bookID']))
{
    $bookID = $_POST['bookID'];

    $result = mysql_query("INSERT INTO borrowing (UserID, BookID, Returned) VALUES ('".$_SESSION['userID']."', '".$bookID."', '3')", $conn);

    if ($result)
        echo "Book #" + $bookId + " has been reserved.";
    else
        echo "An error message!";
}
?>

PS#1:对mysqli 的更改对您的代码来说是最小的,但强烈推荐。

PS#2:Ajax 调用中的success 并不意味着query 成功。仅表示 Ajax 事务正确进行并得到了满意的响应。这意味着,它向url 发送了正确的数据,但url 并不总是做正确的事情。

【讨论】:

  • 仍然没有,根本没有发生。这是我第一次使用 ajax,但它并不顺利。我了解所有代码,但它不起作用。模态本身可以工作的事实,但是随着 ajax 的引入,它没有,有什么可以简单地阻止 ajax 运行吗?也不确定我的眼睛是否在播放,但您的脚本上是否缺少右括号?好吧,我关闭以防万一,仍然没有:/
  • @Tom 它是否在数据库中插入任何内容?或者它根本什么都不做?
  • @Tom 使用编辑后的代码重试。只需更改 Ajax 调用中的 data 字段即可。
  • 什么都没有,即使每次我仍然检查数据库时模态都不会出现,也没有插入任何东西,我无法判断 php 是否没有运行, 或者 ajax 不是。
【解决方案2】:

您的 ajax 定义中有错误。应该是:

$.ajax
({ 
    url: 'reserbook.php',
    data: "book_id="+book_id,
    type: 'post',
    success: function()
    {
        $('.modal-box').text(result).fadeIn(700, function() 
        {
            setTimeout(function() 
            {
                $('.modal-box').fadeOut();
            }, 2000);
        });
    }
});

【讨论】:

    【解决方案3】:

    您的 Ajax 格式不正确,您需要 succsses 事件。这样,当您调用 ajax 并成功时,它将显示响应。

    $.ajax
            ({ 
                url: 'reserbook.php',
                data: {"book_id":book_id},
                type: 'post',
                success: function(data) {
                    $('.modal-box').text(result).fadeIn(700, function() 
                    {
                       setTimeout(function() 
                        {
                        $('.modal-box').fadeOut();
                        }, 2000);
                    });
                  }
                 }
    

    编辑:

    另外一个重点是data: "book_id="+book_id,应该是data: {"book_id":book_id}

    【讨论】:

    • ,type: 'post' 之后丢失。
    • 我已将我的 ajax 更改为此,但现在什么也没有发生,我已更新我的帖子以显示我的完整脚本,可能搞砸了。不过想一想,你可能会面对手掌,在我的 reservebook.php 中我需要有: 或者不管它是否能够获取变量,该脚本也将允许这个 ajax 正常工作,它不仅适用于 jquery? :S
    • @Tom 如果您复制并粘贴,我会更新答案,因为我缺少 , 但 Jquery 库不是问题。
    【解决方案4】:
    $.ajax
    ({ 
        url: 'reservebook.php',
        data: {
        jqbookID : book_id,
        },
        type: 'post',
        success: function()
        {
            $('.modal-box').text(result).fadeIn(700, function() 
            {
                setTimeout(function() 
                {
                    $('.modal-box').fadeOut();
                }, 2000);
            });
        }
    });
    

    });

    试试这个

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-21
      • 1970-01-01
      • 1970-01-01
      • 2012-05-15
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      相关资源
      最近更新 更多