2011-01-24 60 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