jQuery - $ .ajax успешных данных обратного вызова пуст - PullRequest
2 голосов
/ 14 апреля 2011

Я использую jQuery $ .ajax, чтобы опубликовать простую форму контакта в php-скрипте.Я пытаюсь оценить ответ и, основываясь на этом, либо заменить всю форму сообщением "спасибо", либо заполнить раздел "ошибкой" с проблемами.Обратный вызов успеха вызывается, поэтому (я думаю) ошибки нет, но данные все же пусты.

jQuery код:

$(document).ready(function() {
    $("input[type='submit']").click(function(event) {
        event.preventDefault();
        var name = '#' + $(this).closest('form').attr('name');
        $.ajax({
        url: "ajax/index1.php",
        type: "POST",
        data: $(name).serialize(),
        success: function(data) {
            alert(data);
            if (data == 'yes') {
                $('#error').html(data);
            } else {
                $(name).html(data);
            }
        },
        error: function(jqXHR, textStatus, errorThrown) {
            alert(textStatus);
        }
        });
    });
});

Я почти уверен, что функция успеха(не ошибка) работает, потому что я получаю предупреждение, даже если я удаляю функцию ошибки.Также, если я удалю эту строку предупреждений, я не получу никаких предупреждений.И содержимое формы заменяется пустым div, так что похоже, что он работает гладко.

Кроме того, если я заменю "alert (data)" на "alert ('hello')", который отображается.Таким образом, данные пусты!

Если я попытаюсь опубликовать форму напрямую (без jQuery), я получу ответ со страницы php - либо «Пожалуйста, введите ваше имя. Пожалуйста, введите свой адрес электронной почты. Пожалуйста, введите вашКомпания."Или «Спасибо! Ваше сообщение отправлено».

Все в одном домене.

Почему данные пусты?Последние 6 часов я просто не могу разобраться с этим.

Я не установил никаких глобальных настроек ajax.Перед публикацией здесь я также попробовал это с JSON, как предложено в одном из ответов и с тем же результатом - пустой ответ.Я также попробовал xml.

index1.php содержит тонну кода, связанного с другими формами на сайте.Суть этого:

if (!isset($_POST['submit'])) exit();
if (isset($_POST['submit'])) {
    switch (basename($_SERVER['HTTP_REFERER'])) {
//define required fields, fields to e-mail in the form, success message, form div id...
    }
}
if (is_array($required)) {
    $errors = array();
    foreach ($required as $req) {
        $error = '';
        if (empty($_POST[$req])) {
            switch ($req) {
//adjust error message based on name of field...
                    default: $error = 'Please enter your ' . $req . '.';
            }
            $errors[] = $error;
        }
    }
}
    if (empty($errors) && is_array($fields)) {
        //decide to which e-mail address to send everything based on the form input
       $headers = "From: ...";
       $subject = "Inquiry";
    $body = "The following information was submitted:\n\n";
    foreach ($fields as $a => $b) {
        if (is_array($_POST[$a])) {
            $body .= sprintf("%s: %s\n", $b, stripslashes(implode(', ', $_POST[$a])));
        } else {
            $body .= sprintf("%s: %s\n", $b, stripslashes($_POST[$a]));
        }
    }
    $send = mail($to, $subject, $body, $headers);
    if (!$send) $msg = 'We encountered an error sending your message, please go back and try again. If the problem persists, please call us.';
}
$error = 'no';
if (is_array($msg)) {
    $msg = implode(' ', $msg);
    $error = 'yes';
}
header('Content-type: text/html');
echo $error . ' ' . $msg;
}

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

Одна мысль - может ли $ _SERVER ['HTTP_REFERER'] быть моей проблемой?Я переключаюсь с прототипа, и это не было проблемой, поэтому я принял это как должное здесь.Если да, есть ли способ идентифицировать страницу, с которой была отправлена ​​форма?

[ОБНОВЛЕНИЕ] Попытка добавить сценарий «по умолчанию» в операторе переключателя $ _SERVER ['HTTP_REFERER'] безрезультатно, поэтому яЯ предполагаю, что это не проблема.

Ответы [ 2 ]

2 голосов
/ 14 апреля 2011

Проблема с вашим AJAX заключается в том, что вы переопределяете действие кнопки отправки по умолчанию, поэтому кнопка submit на самом деле не передает данные, Javascript что делает это и глядя Javascript код, $_POST['submit'] никогда не будет установлен, когда вызывается страница PHP :

var name = '#' + $(this).closest('form').attr('name');
    ...
    data: $(name).serialize(),

Единственный POST отправка информации - это переменная name, попробуйте отправить поле submit с некоторым значением, и вы увидите другой ответ.

Вы также можете проверить, действительно ли это происходит, изменив exit() по die('empty submit').

0 голосов
/ 14 апреля 2011

попробуйте добавить опцию dataType: "text" и полный обратный вызов ниже, чтобы проверить ваш ответ

complete: function(xhr, status) {

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