【问题标题】:How can I get a jquery css container to pop up letting the user know data was successfully entered?如何让 jquery css 容器弹出让用户知道数据已成功输入?
【发布时间】:2009-05-21 05:21:54
【问题描述】:

当用户将数据插入表单然后提交时,它会转到我的 php 脚本并插入数据。该脚本将返回一个值,让用户知道数据是否已插入。由于我使用的是 JQuery,所以我不知道该怎么做。有人可以指出我正确的方向吗?我所追求的只是一个漂亮、整洁的 200 x 25 像素小容器,它会淡入,用户必须单击它才能确认它。

现在想来,既然用户不是港湾里最亮的灯,如果我不仅能展示这个css框让他们知道插入是否成功,还能向他们展示客户,那真是太酷了插入以防他们忘记离开的位置。

谢谢。

【问题讨论】:

  • 这是一个 AJAX 场景还是您只是在询问如何使用 jQuery 显示一个小浮动通知?
  • 嗨贾勒特。是的,但我想将它与我的服务器端的东西联系起来,以便向用户提供关于数据插入是否成功的准确消息。
  • 我对我的意思添加了相当长的解释。我希望它有所帮助。 :)

标签: javascript jquery html css


【解决方案1】:

我不会将此标记为重复,但您实际上是在询问使用 jQuery 显示通知的最佳方式。那是asked before。简而言之,在您的基本设置中,您需要做的就是显示一个 div 并将其淡入,但是有很多插件可以处理更多情况。

就向他们显示插入的客户或其他内容而言,您所要做的就是从服务器返回一个 JSON 响应,并使用您的 AJAX 请求的成功回调来处理它。然后,您将可以访问从服务器传回的数据。

进一步解释一下:您似乎要求做的是如何使用 Ajax 向服务器发送请求,获得一切按预期进行的通知,然后根据发生的情况在网页中显示通知.如果这是正确的,我将继续进行这些假设。

让我们整理一个简单的表单,将新客户添加到一个虚构的网站。它可能看起来像这样:

<form action='add_customer.php' method='POST' id='add_customer_form'>
    First Name: <input type='text' name='first_name'><br>
    Last Name: <input type='text' name='last_name'><br>
    Email: <input type='text' name='email'><br>
    <input type='submit' value='Add Customer'>
</form>

现在,我们用于处理此表单提交(通过 AJAX)的幼稚、不安全 PHP 代码可能看起来像这样。我说幼稚和不安全是因为你会做更多的数据验证(因为你从不相信来自客户端的任何东西)并且肯定需要清理数据以防止 SQL 注入。然而,这是一个示例,所以它可能看起来像这样:

$first_name = $_POST['first_name'];
$last_name = $_POST['last_name'];
$email = $_POST['email'];
if(mysql_query("
    INSERT INTO customers
    (first_name, last_name, email)
    VALUES 
    ('$first_name','$last_name','$email')
   ")) {
    $success = 1;
    $message = 'Customer ' . $first_name . ' successfully added!';
} else {
    $success = 0;
    $message = 'Something went wrong while adding the customer!';
}
print json_encode(array('success' => $success, 'message' => $message));

然后我们可能会使用 jQuery 处理这个表单的发送和从服务器接收数据,代码看起来有点像这样:

$(function() {
    $('#add_customer_form').submit(function() { // handle form submit
        var data = $(this).serialize(); // get form's data
        var url = $(this).attr('action'); // get form's action
        var method = $(this).attr('method'); // get form's method
        $.ajax({
            url: url, // where is this being sent to?
            type: method, // we're performing a POST
            data: data, // we're sending the form data
            dataType: 'json', // what will the server send back?
            success: function(data) { // the request succeeded, now what?
                // here data is a JSON object we received from the server
                // data.success will be 0 if something went wrong
                // and 1 if everything went well. data.message will have
                // the message we want to display to the user
                // at this point you would use one of the techniques I linked
                // to in order to display a fancy notification

                // the line below will dynamically create a new div element,
                // give it an ID of "message" (presumably for CSS purposes)
                // and insert the message returned by the server inside of it
                var $div = $('<div>').attr('id', 'message').html(data.message);

                if(data.success == 0) {
                    $div.addClass('error'); // to personalize the type of error
                } else {
                    $div.addClass('success'); // to personalize the type of error
                }
                $('body').append($div); // add the div to the document
            }
        });
        return false; // prevent non-ajax form submission.
    });
});

我没有测试过任何代码,但想法就在那里。您从服务器返回带有数据的格式 JSON,并处理请求完成时 jQuery 触发的成功回调,并向您的文档添加一个您可以根据需要设置样式的元素(并显示 fadeIn() if你想要的)带有描述发生了什么的消息。您可能还需要捕获错误回调(如果您的服务器由于某种原因没有响应,则会触发该回调)并在这种情况下触发另一个警报。

【讨论】:

  • 感谢您的链接。我只是查看了一下,但如果服务器发回确认,我仍然看不到弹出窗口的方法。有什么想法吗?我知道我可以弹出一个框,哎呀,我可以用一个警告框来做到这一点,但是如何从服务器端注入数据呢?谢谢。
  • 您将在 ajax 调用的成功回调中使用该代码。您从服务器返回 JSON,告诉 jQuery 期望的数据类型,然后使用返回的数据填充 DIV。
  • 嗨,保罗,谢谢。我很抱歉,但我不明白。我正在使用 JSON 将我的数据库内容导入到文本框中,但我不知道该怎么做。是否有某种你可以指出我的 tut 可以详细解释这一点?我肯定会使用它。它会极大地帮助我的用户。感谢您提供的任何帮助。
  • 天啊..保罗。谢谢你,兄弟!我没想到会这样。 :) 评论和所有。我实际上以为你们放弃了我,所以我离开了一会儿。保罗,非常感谢你!
  • 放弃?绝不。 :) 如果您需要更多帮助,请告诉我。如果我没记错的话,你也有关于最好的 jQuery 资源的问题,所以我知道一开始学习这个是多么令人沮丧。但是,一旦你开始使用它,它真的很棒。祝你好运。
【解决方案2】:

Fading effects 可以通过执行以下操作之一来完成:

jQuery(myDiv).fadeIn()
jQuery(myDiv).fadeOut()
jQuery(myDiv).fadeTo()

我建议您首先创建这个 css 框 - 创建 html 和 css。然后您可以尝试淡化 - jQuery 允许您指定淡化颜色、淡化持续时间等参数。

【讨论】:

    【解决方案3】:

    这里有一些工作...

    您的 PHP 脚本会根据结果输出此内容

    $json = array(
        'success' => $insertSuccess,
        'message' => $numRecords . ' records inserted in ' . $insertTime . 's'
    );
    
    echo json_encode($json);
    

    然后,在 JSON 的回调中,您通过解析 JSON 对象来确定插入是否成功。您的回调可能看起来像这样

    function(data) {
    
        success = data.insertedSuccess;
    
        if (success) {
             $('#success').fadeIn(1000);
        } else {
             $('#failure').fadeIn(1000);
        }
    
    }
    

    【讨论】:

    • 我真的很喜欢这些徽章男孩。 :) 感谢 sn-p 亚历克斯。 Paolo 建议我可以使用 JSON 将我的服务器端内容回显到一个非常棒的窗口!我只是不明白他的意思。你会翻译吗?
    • 是的,您可以在 JSON 中提供您返回的附加信息,例如“1 条记录插入 0.01 秒”或类似信息。
    • 嗯.. 我的 JSON 只是从数据库中返回一个数组。我可以添加到那个数组中吗?
    • 我会在答案中添加更多内容
    • 嗨,亚历克斯,谢谢!保罗把这个拿了下来。 :) 我真的很喜欢你的回答。我想我也可以在那里使用fadeIn() 函数。当您提供编码数组的样本时,这对我来说很有意义。我不得不重新学习爬行,这让我感觉很糟糕。
    猜你喜欢
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    • 2019-04-01
    • 2012-02-06
    • 1970-01-01
    相关资源
    最近更新 更多