2014-01-13 3 views
0

Идея заключается в том, что этот скрипт POST присваивает значение текстового ввода в моей форме html emailform.php, которое берет эти данные и добавляет его в файл .txt. Я думаю, что у меня возникают проблемы с настройкой значения $email в PHP на то, что в текстовом вводе html. В результате, в настоящий момент, когда скрипт запускается, я получаю два предупреждения (первая «ошибка», затем «полная», из функций .fail и .complete), а затем перезагрузка страницы. Вот почему я думаю, что проблема заключается в том, что информация возвращается из PHP, но, возможно, я ошибаюсь.Проблемы с получением данных от AJAX до PHP (и обратно)

<form method="post"> 
    <input type="text" name="email" value="" class="emailSubmitSidebar" placeholder=" Your Email"> 
    <input type="submit" name="submit" value="Add" class="submitButton" id="subscribeButton"> 
</form> 
<script type='text/javascript'> 
    $(document).ready(function() { 
     var subscribeButton = $('#subscribeButton'); 
     subscribeButton.click(function() { 
      $.ajax({ 
       url: 'emailform.php', 
       type: 'POST', 
       dataType: 'text', 
       data: {email: $("input[name=email]").val()}, 
      }) 
      .done(function(data) { 
       alert("Added!"); 
      }) 
      .fail(function() { 
       alert("error"); 
      }) 
      .always(function() { 
       alert("complete"); 
      }) 
     }) 
    }) 
</script> 

И ниже PHP, я добавил первые две строки для проверки любых ошибок, которых больше нет. Странно, что когда я запускаю PHP отдельно, строка echo печатает номер 3 на странице без каких-либо очевидных причин. Я прокомментировал переменную $email, потому что мне повезло, что было лучше/необходимо сначала проверить, не isset.

<?php 
    ini_set('display_errors', 'On'); 
    error_reporting(E_ALL); 
    $fileHandle = fopen('emailList.txt', 'a') OR die ("Can't open file\n"); 
    $email= isset($_POST['email']) ? $_POST['email'] : ""; 
    // $email=$_POST['email']; 
    $result = fwrite ($fileHandle, "$email; \n"); 
    fclose($fileHandle); 
    echo (!$result) ? "error" : $result; 
    die; 
?> 

ответ

0

Я думаю, что есть что-то не так с вашими данными, попытайтесь сериализовать его в массив JSON данных:

var data = $(form).serialize(); 

$.ajax({ 
    url: 'emailform.php', 
    type: 'POST', 
    dataType: 'text', 
    data: data, 
}) 

Значения будут посланы как обычный запрос пост, так что адрес электронной почты будет быть в $_POST['email'];

Обновлено здесь

В Jquery .done() и .fail() функции требуют HTTP коды статуса для работы, так что ваш файл PHP должен вернуть эти коды. Когда запрос сделан и преуспел, все в диапазоне 200 будет в порядке. Хотя при ошибке следует вернуть что-то из диапазона 400 или 500. Существует полный список здесь: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

Таким образом, функция ajax .success запускается, когда возвращается 2xx (замените .done на .success), и вызывается .error, когда возвращается код состояния 4xx или 5xx. Смотрите, как это реализовать.

номер 3 вы получаете это $ возвращаемого значения FWRITE функции, в соответствии с: http://nl3.php.net/fwrite

FWRITE() возвращает количество записанных байт, или FALSE при ошибке.

сделать ваш PHP как это:

<?php 
//ini_set('display_errors', 'On'); 
//error_reporting(E_ALL); 

if($fileHandle = fopen('emailList.txt', 'a')) { 

    if(isset($_POST['email']) && !empty($_POST['email'])) { 
    $email = $_POST['email']; 

    $result = fwrite ($fileHandle, "$email; \n"); 
    fclose($fileHandle); 

    if(isset($result) && !empty($result)) { // Something was written 
     http_response_code(200); 
     echo "File written"; 
    } else { // Writing failed 
     http_response_code(500); 
     echo "Writing of file failed"; 
    } 
    } else { // Empty email 
    http_response_code(500); 
    echo "Email was empty"; 
    } 
} else { // File could not be opened 
    http_response_code(500); 
    echo "File could not be opened for writing"; 
} 
?> 
+0

Это выполняется без ошибок, но электронная почта не получает записывается в текстовый файл и перезагружает страницы после нажатия (и вход отображается в URL в качестве параметра). Что мне делать @ Neograph734? – trop

+0

Обновите свой вопрос тем, что у вас есть сейчас.Я вижу, что вы его обновили, но неправильные 'data: ('input'). Val()' все еще существуют. Тогда мы можем посмотреть на это еще раз. Перезагрузка не имеет смысла ... Также удалите 'OR DIE', вместо этого произведите ошибку с правильным http_response_code. И вы можете использовать 'fwrite ($ fileHandle," $ email; \ n ");' .txt файлы не понимают
;) – Neograph734

+0

Я обновил вопрос! Спасибо за вашу помощь до сих пор :). Я изменил 'data:'. Я не уверен, как заменить «OR DIE» тем, что вы предлагаете. И да, я поймал вопрос
. См. Новое описание в вопросе. В основном сценарий PHP повторяет номер 3, и я думаю, что это вызывает предупреждения. @ Neograph734 – trop

0

(Simple)

Изменить HTML для:

<input type="text" name="email" value="" class="emailSubmitSidebar" placeholder=" Your Email"> 

Изменение JS для:

 $.ajax({ 
     url: 'emailform.php', 
     type: 'POST', 
     dataType: 'text', 
     data: {email: $("input[name=email]").val()} 
    }) 
    .done(function(data) { 
     // there checking 
     alert("success!") 
    }) 

Изменить PHP для:

$fileHandle = fopen('emailList.txt', 'a') OR die ("Can't open file\n"); 
    $email=$_POST["email"]; 
    $result = fwrite ($fileHandle, "$email; <br/>"); 
    fclose($fileHandle); 
    echo (!$result)? "error" : $result; 
    die; 
+0

Я получаю предупреждение с 'error'. Он отправляется с помощью .fail (я проверил). Я думаю, что проблема связана с переменной $ email в php, поскольку текстовый файл получает разрывы строк, но не электронную почту. @ voodoo417 – trop

+0

@ user3163188 проверить 'var_dump ($ email)' перед fwrite. – voodoo417

+0

@ user3163188 Или попробуйте изменить в '$ .ajax' на' data: {email: $ ("input [name = email]"). Val()} ' – voodoo417

Смежные вопросы