【问题标题】:jQuery.AJAX post() - a few questions and issuesjQuery.AJAX post() - 几个问题和问题
【发布时间】:2011-06-14 18:02:38
【问题描述】:

我正在创建一个网站,用户在该网站上发送垃圾邮件按钮并以此提高他们的得分。

我不想在单击按钮时刷新页面,所以我想使用 AJAX 将数据发送到服务器。到目前为止,这是我所拥有的:

<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.3.min.js"></script> 
<script type="text/javascript"> 
$(document).ready(function(){ 
        $("#update").click(function() { 
            $.ajax({ 
            type: "POST", 
            url: "update.php", 
            data: "increase", 
            dataType: "Boolean", 
            success: function(update) {} 
                }); 
                    }); 
                    }); 
</script> 
<button id="update" type="button">Button</button> 
<div id="counter"></div>

一点也不多,我知道,但我对这些东西很陌生。我遇到的主要问题是您应该使用的语法。如果请求成功,我希望服务器返回一个布尔变量,那么我是否会在“数据类型”中以反逗号、撇号或其他形式使用布尔变量?

另外,我正在努力掌握 ajax 脚本如何知道它是否成功。 'update.php' 脚本中是否会有返回 'TRUE' 或 'FALSE' 值的内容?

最后,要发送到 php 文件的数据应该告诉 php 用新的分数更新 mysql 表。如果接收到 ajax 发送的数据,我应该如何告诉 php 更新 mysql?

非常感谢

【问题讨论】:

  • 这是一个定时事件吗?就像他们可以在特定时间段内多次按下按钮一样?如果是这样,您应该跟踪客户端,而不是发送 100 个 ajax 调用,然后在计时器到时向服务器发送一个更新。
  • 感谢您的回复,我只是想先设置基本系统,然后我会对其进行调整以添加诸如计时器之类的东西,如您所说,或增量
  • 括号和花括号不匹配...
  • 天哪,谢谢你指出这一点:)

标签: php javascript jquery ajax post


【解决方案1】:

这个语法应该可以工作

$(document).ready(function(){ 
    $("#update").click(function(){
            $.ajax({type: "POST", 
                    url: "update.php", 
                    data: "increase",
                    success: function(update) {
                             if(update)
                                $("#anyelement").html("Thanks");
                             else
                                $("#anyelement").html("Try again !");   
                }
            });
        });  
 });

你可以忽略数据类型,因为你可以从任何方向解析

how the ajax script knows whether it's successful

如果我理解你的意思,只要有一个返回到 ajax 函数的过程是成功的,由你来解析返回并实现逻辑。

你的 php 你这样做:

if(you logic is correct){
    //update you database and ... other login goes here
    return true;
}else{
    return false;
}

【讨论】:

  • 谢谢所以php只是说“返回真”,ajax会理解吗?
  • 查看更新的答案!获取结果并将结果显示给用户!!
【解决方案2】:

dataType 属性是 json、xml、html、jsonp、文本或脚本之一。 Boolean 不是预期的类型之一。在这种情况下,您不想关注那些预期的类型。如果你什么都不传入,jQuery 会根据服务器返回的 MIME 类型对类型进行智能猜测。

您要做的是创建一个将由成功回调调用的函数。

$.ajax({ 
     type: "POST", 
     url: "http://www.server/path/to/update.php", 
     data: "increase", 
     success: function(data, status, xhr) {
         functionToProcess(new Boolean(data));
     } 
   )}; 

当 Ajax 调用以 200 值完成时,作为成功参数给出的函数(在本例中为匿名函数)被调用。因为 Ajax 是异步的(这就是 A),所以返回东西对你没有好处。你想要做的是调用另一个函数来处理你的布尔值。我在示例代码中将其称为functionToProcess。如需更多信息,请查看.ajax() 上的 jQuery 文档。

您可以了解 Javascript 中的 String 值生成 true 和 false 布尔值 here

【讨论】:

    【解决方案3】:

    类似的东西应该可以工作:

    $.ajax({ 
             type: "POST", 
             url: "update.php", 
             data: {"action":"increase"}, 
             success: function(response) {
                if(response.error) {
                   alert(response.error);
                   return;
                }
                if(response === 'true') {
                   //do something
                } else {
                   //do something else
                }
             } 
           )}; 
    

    在 PHP 端,您的代码可能如下所示:

    <?php
       if(!isset($_POST['action'])) {
          echo '{"error": "You must provide a action"}';
          exit;
       }
    
       $action = $_POST['action'];
       if(!in_array($action, array('increase', 'decrease')) die('{"error":"invalid parameters"}');
    
       $action = ($action == 'increase') ? ' + 1' : ' - 1';
    
       //$db is assumed to be a live mysqli object from here on out...
    
       $result = $db->query("UPDATE someTable SET fieldname = fieldname {$action} LIMIT 1;");
       echo ($result->affected_rows > 0) ? 'true' : 'false';
    ?>
    

    【讨论】:

    • 感谢您的回复,我对此有点陌生,请您解释得更简单一些:(
    • 什么是真实值?如果数据类型是布尔值,那么返回的任何字符串都是 TRUE,如果没有返回数据则为 FALSE?
    • 非常感谢,现在对我来说更有意义了! php脚本末尾回显的代码我不太明白,那基本上是做什么的?
    • @Taimur 如果更新成功输出“true”,否则输出“false”。
    • 好的,谢谢,但实际上并没有在页面上显示“真”或“假”?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 2013-06-30
    • 2015-01-03
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多