jQuery.AJAX post () - несколько вопросов и проблем - PullRequest
2 голосов
/ 24 января 2011

Я создаю сайт, на котором пользователь нажимает кнопку и тем самым увеличивает свой счет.

Я не хочу, чтобы страница обновлялась при нажатии кнопки, поэтому я хочу использовать 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?

Большое спасибо

Ответы [ 3 ]

1 голос
/ 24 января 2011

Атрибут dataType является одним из json, xml, html, jsonp, text или script. 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 в моем примере кода. За дополнительной информацией обращайтесь к документации jQuery по .ajax () .

.

Вы можете узнать о том, какие строковые значения в Javascript выдают истинные против ложных логических значений здесь .

1 голос
/ 24 января 2011

Этот синтаксис должен работать

$(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;
}
1 голос
/ 24 января 2011

Что-то вроде этого должно работать:

$.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';
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...