JQuery: запрос AJAX не работает - PullRequest
1 голос
/ 08 марта 2011

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

/********************************
CHANGE USER SETTINGS
*********************************/

$(".submitUserSetting").live('click', function() {

    //get values
    var department = $("#us_department").val(); 
    var sortOrder = $("input[@name=us_sortOrder]:checked").val();

    $.ajax({
        type: "POST", 
        url: "lib/includes/updateUserSettings.php",
        data: "empname=" + empname + "&department=" + department + "&sortOrder=" + sortOrder,
        success: function(data) { 
            alert(data);
        }
    });


});

Я ничего не имею в виду. Нет ошибок JavaScript, нет ошибок в запросе MySQL, даже данные POST в console.log. Просто насмешливая партия тишины. Даже если я закомментирую весь код на странице PHP и просто выведу данные, которые я ему отправил, ничего. Вот страница PHP (класс существует, функции работают, я использую их на дюжине или около того других страницах)

 <?php

    require_once("../classes/mysqlconnect.php");
    $db = new dbconnect();
    $db->makeConnections("TimeSheetManager");

    $empname = $_POST['empname'];
    $department = $_POST['department'];
    $sortOrder = $_POST['sortOrder'];


    //get the department id
    $dQuery = "SELECT id FROM departments WHERE department = '" . $department . "'";
    $dResults = $db->getResults($query); 
    if (mysql_num_rows($dResults) > 0) { 
        while($rows = mysql_fetch_array($dResults) { 
            $deptID = $rows['id'];
        }
    } 


    //update database
    $query = "UPDATE users SET `department` = '" . $department "', `displayOrder` = '" .        $sortOrder . "' WHERE username = '" . $empname . "'"; 
    $results = $db->getResults($query); 

    if ($results) { 
        echo "!success"; 
    } else { 
        echo "!fail"; 
    }

    ?>

Вот код формы:

<div id="userSettingsForm">
        <form name="userSetting">
            <p><label for="sortOrder">Display Order:</label></p>
            <p class="userSettingElement">Oldest First&nbsp;<input type="radio" name="us_sortOrder" value="asc">&nbsp;&nbsp;Newest First&nbsp;<input type="radio" name="us_sortOrder" value="dsc"></p>
            <p><label for="us_department">Department:</label></p>
            <p class="userSettingElement">
                <select id="us_department" name="us_department">
                <option value="null">Select A Department</option>
                <?php 

                    $query = "SELECT * FROM departments";
                    $results = $db->getResults($query);

                    while($row = mysql_fetch_array($results)){
                        if (count($results) > 0) { 
                            //get department and id
                            $department = $row['department'];
                            $deptID = $row['id'];

                            print "<option value=\"" . $deptID . "\">" . $department . "</option>";
                        }
                    }

                ?>
                </select>
            </p>
            <p><a href="javascript:void(0);" class="submitUserSetting btn">Submit</a></p>
        </form>
    </div>

Спасибо за помощь и предложения. Я перезагрузил Firefox, и ошибка была в empname, я не устанавливал его (doh!). Белуга была на этом, но это заняло немного времени, чтобы это дошло до меня. Хотел бы я наградить всех ответом.

Ответы [ 4 ]

4 голосов
/ 08 марта 2011

Как вы можете сказать, что не получаете сообщение об ошибке? Добавьте обработчик ошибок к вашему вызову .ajax ():

$.ajax({
    type: "POST", 
    url: "lib/includes/updateUserSettings.php",
    data: "empname=" + empname + "&department=" + department + "&sortOrder=" + sortOrder,
    success: function(data) { 
        alert(data);
    },
    error: function (xmlHttpRequest, textStatus, errorThrown) {
         alert(errorThrown);
    }
});
2 голосов
/ 08 марта 2011

ОК, еще одно расследование показывает, что ошибка на самом деле в специфической комбинации фрагментов кода, которые вы используете.

Очевидно, href="javascript:void(0)" предотвращает распространение событий. Событие запускается на самом элементе (поэтому работают обработчики, связанные с .click(fn)), но элементы-предки не уведомляются о событии.

Поскольку вы используете метод .live(), который основан на распространении событий, здесь он не работает.

Я бы предложил следующее:

<a href="#" class="submitUserSetting btn">Submit</a>

и JS:

$(".submitUserSetting").live('click', function(e) {
    e.preventDefault(); // disable the link action

    [snip]
});

См. JsFiddle, демонстрирующее это.

1 голос
/ 08 марта 2011

Проблема заключается в способе отправки данных.

Попробуйте заключить свойство в { } 's и измените формат переменной на

{ "propertyName" : "value", "propertyName" : "value" } 

, т. Е.

 data: { "empname" : empname ,"department" : department, "sortOrder" :sortOrder }

в качестве альтернативы, если это форма, вы даже можете сказать

data : { $("#form").serialize() }
0 голосов
/ 08 марта 2011

вам нужно вернуть значение в вашей функции php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...