Почему не работает POST через jQuery,ajax?

maxapet

Новичок
Есть такая форма:
HTML:
<form id="settingsFrm" name="settingsFrm" method="POST" action="saveSettings.php">
<input type="hidden" name="tHeaderText" value="New Title" />
<input type="hidden" name="cHeaderText" value="" />
<input type="hidden" name="cHeaderBackground" value="" />
<input type="hidden" name="tTitle" value="Title" />
<input type="submit" value="Сохранить настройки" />
</form>
Передаю её через AJAX вот так:
Код:
$("#settingsFrm").on("submit", function(eo){
    var $that = $(this);
    var $formData = new FormData($that.get(0));
    alert($that.attr("method"));
    $.ajax({
        url: $that.attr("action"),
        type: $that.attr("method"),
        contentType: "application/x-www-form-urlencoded",
        processData: true,
        data: $formData,
        dataType: "text", //"json",
        success: function(data) {
            alert(data);
        },
        error: function(xhr, textStatus, errorThrown) {
            alert("Ошибка!" + "\n" + xhr + "\n" + xhr.status);// + "\n" + xhr.responseText);
        }
    });
    eo.preventDefault();
});
saveSettings.php имеет такой вид:
PHP:
<?
    if(!empty($_POST[tHeaderText]))
        echo $_POST[tHeaderText];
    else
        echo "Ошибка";
    exit;
?>

И получаю сообщение "Ошибка". Если processData=true, то php отрабатывает правильно, но при этом происходит переход на страницу saveSettings.php, а возврата на страницу с которой отправляю данные не происходит.
В чём может быть дело?
 

maxapet

Новичок
Работает вот такой вариант отправки:
Код:
$("#settingsFrm").on("submit", function(eo){
    var $that = $(this);
    var $formData = new FormData($that.get(0));
    alert($that.attr("method"));
    $.ajax({
        url: $that.attr("action"),
        type: $that.attr("method"),
        contentType: false,
        processData: false,
        data: $formData,
        dataType: "text", //"json",
        success: function(data) {
            alert(data);
        },
        error: function(xhr, textStatus, errorThrown) {
            alert("Ошибка!" + "\n" + xhr + "\n" + xhr.status);// + "\n" + xhr.responseText);
        }
    });
    eo.preventDefault();
});
 

ksnk

прохожий
Код:
$that.get(0)
-$that - объект jQuery. get выполняет запрос по адресу 0. Вероятно, при этом появляется странное ругательство, которое видно в окне отладки javascript. Это действительно так и задумано?

Вероятно, более разумно было бы написать
Код:
var $formData = new FormData(this);
зачем нужен FormData вообще?
Код:
var $that = $(this);
   $.ajax({
        url: $that.attr("action"),
        type: $that.attr("method"),
        contentType: false,
        processData: false,
        data: $that.serialize(), // вот так готовится serialize
        dataType: "text", //"json",
        success: function(data) {
            alert(data);
        },
        error: function(xhr, textStatus, errorThrown) {
            alert("Ошибка!" + "\n" + xhr + "\n" + xhr.status);// + "\n" + xhr.responseText);
        }
    });
    return false; // это чтобы не писать preventDefault и прочие непонятные телодвижения с всплыванием событий
может так лучше?
 

maxapet

Новичок
Пример использования FormData взял отсюда: http://www.webpress.uz/Alexandr/jQuery/Zagruzka-izobrajeniy-Jquery-PHP/#.V3SBvWuhmEd
FormData - стандартный объект в JS для передачи содержимого форм. Честно скажу, про jQuery.serialize() я не знал до того момента, пока не возникла эта проблема. Может, с ним и лучше будет - попробую, спсибо.
 
Сверху