2011-01-24 63 views
2

我正在制作一个网站,用户在这里按一个按钮并增加他们的分数。jQuery.AJAX post() - 一些问题和问题

当按钮被点击时,我不希望页面刷新,所以我想用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表。我应该如何去告诉PHP来更新mysql,如果它接收到ajax发送的数据?

非常感谢

+1

这是一个定时的事件?像很多时候他们可以在一定时间内按下按钮?如果是这样,而不是发送100个Ajax调用,你应该跟踪客户端,然后在定时器启动时向服务器发送一个更新。 – dqhendricks

+0

感谢您的回复, 我只是想先设置基本系统,然后我会调整它来添加类似计时器的东西,正如您所说的,或者增量 – Taimur

+0

您有不匹配的括号和卷曲大括号... – thetaiko

回答

1

东西沿着这一行应该工作:

$.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'; 
?> 
+0

感谢您的答复,我有点新的这一点,你可以解释一下,更简单地请:( – Taimur

+0

什么是truthy价值?它是像如果数据类型是布尔值,那么无论返回的字符串是否为TRUE,并且如果没有返回的数据,它就是FALSE? – Taimur

+0

@Taimur see updated。 –

1

dataType属性是json,xml,html,jsonp,文本或脚本之一。布尔值不是预期的类型之一。在这种情况下,你不想关注那些预期的类型。如果您根据服务器返回的MIME类型传递任何内容,jQuery会对该类型进行智能猜测。

你想要做的是创建一个函数,该函数将被成功回调调用。

$.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中的字符串值是否产生true与false布尔值here

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; 
} 
+0

谢谢 所以PHP只是说“返回true”,Ajax会理解? – Taimur

+0

看到更新的答案!获得结果并将结果展示给用户! – tkt986