JQuery и Ajax - PullRequest
       34

JQuery и Ajax

0 голосов
/ 07 июля 2011

Я искал решение в течение двух дней и больше не могу его принимать.Я заранее прошу прощения за длину этого вопроса.Я не пытаюсь кого-то сокрушить, я просто хотел убедиться, что включу все, что тебе может понадобиться, чтобы помочь мне.Заранее спасибо.Итак, теперь мой вопрос:

Ситуация:

С левой стороны моей страницы управления проектами у меня есть две маленькие формы.Один, чтобы добавить вехи, другой, чтобы добавить задачи / Todos.В правой части страницы я показываю проект в процессе его создания (добавляя этапы и задачи).

Я успешно отправляю формы через Ajax.Но Неважно, что я делаю, я не могу, чтобы «результаты» (правая сторона страницы) отражали обновленный контент без обновления страницы (что в первую очередь противоречит цели использования ajax).Кажется, я не могу понять .ajaxComplete или как правильно заполнить success: часть команды $.post.

Я перепробовал слишком много вариантов, чтобы опубликовать здесь, поэтому я будупросто включите мою последнюю попытку:

javascript

$(document).ready(function() {
    $("#results").load("i/getAllInfo.class.php");

    $('#loader').hide()

    .ajaxStart(function() {
        $(this).show();
    })
    .ajaxStop(function() {
        $(this).fadeOut(1000);
    });
});

function addMilestoneForm() {
    $.post("i/addMilestone.php",
    $("#addMilestoneForm").serialize());
};

function addTodoForm() {
    $.post("i/addTodo.php",
    $("#addTodoForm").serialize());
};

PHP

i / getAllInfo.class.php

<?php
include("database.php");

class getAllInfo
    {
        public function getProjectInfo()
            {
                global $db;
                $projectId = "1";
                $qProject = sprintf("SELECT * FROM projects WHERE id = '%s'",
                                    mysql_real_escape_string($projectId));
                $qProjectResult = mysql_query($qProject);
                return $qProjectResult;
            }

        public function getMilestoneInfo($projectName)
            {
                global $db;
                $qMilestone = sprintf("SELECT * FROM milestones WHERE projectName = '%s' AND complete = 0",
                                mysql_real_escape_string($projectName));
                $rMilestone = mysql_query($qMilestone);
                return $rMilestone;
            }

        public function getTodoInfo($msId)
            {
                global $db;
                $qTodo = sprintf("SELECT * FROM todos WHERE id = '%s' AND complete = 0",
                            mysql_real_escape_string($msId));
                $rTodo = mysql_query($qTodo);
                return $rTodo;
            }
    }
$g = new getAllInfo();

$pInfo = mysql_fetch_object($g->getProjectInfo());
$theProjectName = $pInfo->projectName;
$theProjectSummary = $pInfo->summary;

$rM = $g->getMilestoneInfo($theProjectName);
echo '<h2>' . $theProjectName . '</h2>';

while ($row = mysql_fetch_object($rM))
    {
        $msId = $row->id;
        $milestone = $row->milestone;
        $msEtaTime = $row->etaTime;
        $msEtaScope = $row->etaScope;
    ?>
        <ul style="float: left; clear: left; width: 85%; margin-left: 2%; margin-right: auto; margin-bottom: 10px;">
                <p><b><?php echo $milestone; ?></b><br />
                ETA: <?php echo $msEtaTime . ' ' . $msEtaScope; ?></p>

            <?php
                $rT = $g->getTodoInfo($msId);
                while ($row = mysql_fetch_object($rT))
                    {
                        $todo = $row->todo;
                        $dep = $row->dependency;                                
                ?>
            <li>
                <span>
                    <a href="todos/index.php?todo=<?php echo $todo; ?>"><?php echo $todo; ?></a>
                    <span class="dependency">
                        <span class="innerDep"><?php echo $dep; ?></span>
                    </span>
                </span>
            </li>
                <?php
                    }; ?>
        </ul>
    <?php
    }; ?>

i / addMilestone.php

<?php
include("database.php");
global $db;

$theProjectName = htmlentities($_POST['projectName']);
$milestoneName = htmlentities($_POST['milestoneName']);
$etaTime = htmlentities($_POST['milestoneEtaTime']);
$etaScope = htmlentities($_POST['milestoneEtaScope']);              

$query = sprintf("INSERT INTO milestones (projectName, milestone, etaTime, etaScope) VALUES ('%s', '%s', '%s', '%s')",
            mysql_real_escape_string($theProjectName),
            mysql_real_escape_string($milestoneName),
            mysql_real_escape_string($etaTime),
            mysql_real_escape_string($etaScope));

$result = $db->query($query);
if (!$result)
    {
        return false;
    }
else
    {
        return true;
    }
?>

i / addTodo.php

<?php
include("database.php");
global $db;

$milestoneId = htmlentities($_POST['addToMilestone']);
$todo = htmlentities($_POST['todoName']);
$etaTime = htmlentities($_POST['etaTime']);
$etaScope = htmlentities($_POST['etaScope']);

$query = sprintf("INSERT INTO todos (id, todo, etaTime, etaScope) VALUES ('%s', '%s', '%s', '%s')",
            mysql_real_escape_string($milestoneId),
            mysql_real_escape_string($todo),
            mysql_real_escape_string($etaTime),
            mysql_real_escape_string($etaScope));           

$result = $db->query($query);

if (!$result)
    {
        return false;
    }
else
    {
        return true;
    }
?>

HTML

соответствующийкод (две формы, раздел результатов и т. д.)

<section id="content">
        <span id="loader"></span>
        <span id="alertBox"></span>
        <section id="accordion">
            <form id="addMilestoneForm" style="margin-bottom: 10px;" onsubmit="addMilestoneForm(); return false;">
                <fieldset>
                    <h4>Milestones</h4>
                    <ul>
                        <li>
                            <label for="milestoneName">Name: </label>
                            <input type="hidden" name="projectName" value="FML" id="projectName" />
                            <input type="text" name="milestoneName" value="" id="milestoneName" />
                        </li>
                        <li>
                            <label for="milestoneEtaTime">ETA: </label>
                            <input type="text" name="milestoneEtaTime" id="milestoneEtaTime" style="width: 55%;" />
                            <select name="milestoneEtaScope" id="milestoneEtaScope">
                                <option value="minutes">minutes</option>
                                <option value="hours">hours</option>
                                <option value="days">days</option>
                                <option value="weeks">weeks</option>
                                <option value="months">months</option>
                                <option value="years">years</option>
                            </select>
                        </li>
                    </ul>
                </fieldset>
                <fieldset>
                    <button type="submit" formname="addMilestoneForm">Add</button>
                </fieldset>
            </form>
            <form id="addTodoForm" onsubmit="addTodoForm(); return false;">
                <h4>Todo's</h4>
                <fieldset>
                    <ul>
                        <li>
                            <select name="addToMilestone" id="msSelect"></select>
                        </li>
                        <li>
                            <label for="todoName">Name: </label>
                            <input type="text" name="todoName" id="todoName" />
                        </li>
                        <li>
                            <label for="etaTime">ETA: </label>
                            <input type="text" name="etaTime" value="" />
                            <select name="etaScope">
                                <option value="minutes">minutes</option>
                                <option value="hours">hours</option>
                                <option value="days">days</option>
                                <option value="weeks">weeks</option>
                                <option value="months">months</option>
                                <option value="years">years</option>
                            </select>
                        </li>
                    </ul>
                </fieldset>
                <fieldset>
                    <input type="submit" value="Add" />
                </fieldset>
            </form>
        </section>
        <section id="results"></section>
    </section>

1 Ответ

1 голос
/ 07 июля 2011

Вам просто нужно включить замыкание в качестве третьего параметра в $ .post, т.е.

function addMilestoneForm() {
  $.post("i/addMilestone.php",
      $("#addMilestoneForm").serialize(),
      function(data, textStatus, jqXHR) {
         $('#results > ul').append(data);
      }
  );
};

Кроме того, ваша обертка для инициализации jQuery должна выглядеть следующим образом

$(function() {
    $("#results").load("i/getAllInfo.class.php");

    $('#loader').hide()
    .ajaxStart(function() {
        $(this).show();
    })
    .ajaxStop(function() {
        $(this).fadeOut(1000);
    });
});

Вместо

$(document).ready(function() {})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...