jQuery.AJAX post() - 一些问题和问题

时间:2011-01-24 19:39:45

标签: php javascript 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表。如果它收到ajax发送的数据,我应该如何告诉php更新mysql?

非常感谢

3 个答案:

答案 0 :(得分: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';
?>

答案 1 :(得分:1)

dataType属性是json,xml,html,jsonp,text或script之一。 Boolean不是预期类型之一。在这种情况下,您不希望注意那些预期的类型。如果根据服务器返回的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中的String值与false布尔值here生成的真实值。

答案 2 :(得分: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;
}