Нет ответа Ajax, хотя файл PHP настроен правильно - PullRequest
1 голос
/ 31 января 2012

У меня есть простая форма регистрации в списке рассылки.Он отправляет адрес электронной почты пользователя в файл store-address.php.Я использую объект jQuery ajax, чтобы отправить запрос в файл php, а затем получить ответ.

Проблема в том, что я не получаю ответ из файла php.Я попытался установить кеш в ложь в запросе.Я также попытался отправить информацию через URL следующим образом:

http://www.fifthtribe.com/inc/store-address.php?ajax=true&cache=false&email=test4%40gmail.com

Когда я делаю это таким образом, это работает и дает мне ответ.Но когда я делаю это через ajax, это не дает мне ответа.Это из Firebug:

enter image description here

enter image description here

enter image description here

А вот фрагменты из моего кода:

HTML:

<div id="mlist">
<form id="mlist_form" method="POST" action="">
    <input type="text" id="email" name="email" placeholder="Email" />
    <input type="submit" id="submit_btn" value="Join" />
</form>
<div id="response"></div>
</div>

JQuery:

/* Add to mailing list */           
$("#mlist_form").submit( function(e){
    //$('#response').append('<div id="thanks-mce"><div id="mce-arrow"></div>Thanks for signing up!</div>');
    var email = escape( $('#email').val() );
    e.preventDefault();

    data = {
        "ajax" : "true",
        "email" : email,
        "cache" : "false"
}

    $.ajax({ 
            type: "POST",           
            url: 'inc/store-address.php',
            data: data,
            success: function( msg ){
                // successfully signed up
                $('#response').html( msg );
                $('#email').val('');
            },
            error: function( err ){
                // error while signing up
                $('#response').html('Error: Is your email correct?');
            }
    });

    return false;

});

PHP: функция storeAddress () {

    // Validation
    if(!$_GET['email']){ return "No email address provided"; } 

    if(!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$/i", $_GET['email'])) {
        return "Email address is invalid"; 
    }

    require_once('MCAPI.class.php');
    // grab an API Key from http://admin.mailchimp.com/account/api/
    $api = new MCAPI('xxxxxxxxxxxxxxxxxxxxxxxxxxxxx-us4');

    // grab your List's Unique Id by going to http://admin.mailchimp.com/lists/
    // Click the "settings" link for the list - the Unique Id is at the bottom of that page. 
    $list_id = "xxxxxxxx";

    if($api->listSubscribe($list_id, $_GET['email'], '') === true) {
        // It worked!   
        return 'Success! Check your email to confirm sign up.';
    }else{
            // An error ocurred, return error message   
            return 'Error: ' . $api->errorMessage;
    }

}

    // If being called via ajax, autorun the function
    if($_GET['ajax']){ echo storeAddress(); }
?>

Ответы [ 3 ]

4 голосов
/ 31 января 2012

Вы понимаете, что ваш PHP-скрипт использует метод GET, но ваш код jQuery использует метод POST, верно?

Если информация публикуется в PHP, PHP должен будет использовать $_POST для ее получения. Это объясняет, почему метод URL, использующий $_GET, работает, а jQuery POST - нет.

Удачи!

2 голосов
/ 31 января 2012

Похоже, вы используете $ _GET вместо $ _POST.Попробуйте отобразить содержимое $ _REQUEST, чтобы увидеть, что в нем содержится.

1 голос
/ 31 января 2012

Отладка вашего скрипта!

Поместите предупреждение в части успеха и ошибки вашего скрипта, и тогда вы узнаете, работает ли AJAX.

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

Кроме того, ошибка здесь довольно проста. Вы используете $ _GET в PHP и размещаете свои данные с помощью AJAX, это не будет отображать ошибку. Хотя документ PHP не будет обрабатывать ваш запрос, потому что он не получает никаких параметров.

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