Ошибка jQuery ajax success

Я пытаюсь отправить форму, которая отправляет электронное письмо:

JS

var that = $(this);
$.ajax({
  url: '../wp-content/themes/bsj/php/validate.php',
  type: 'post',
  context: that,
  data: $('#sign-up').serialize(),
  cache: false,
  success: function(){ 
    alert('success!');
  },
  error: function(){
    alert('error!');
  }
});

PHP

/*----------------------------------
    Variables
----------------------------------*/

    // Personal info
    $prefix = $_POST['prefix'];
    $first_name = $_POST['first_name'];
    $last_name = $_POST['last_name'];
    $company = $_POST['company'];
    $email = $_POST['email'];
    $title = $_POST['title'];
    $dept = $_POST['dept'];

    // Contact details
    $address = $_POST['address'];
    $address2 = $_POST['address2'];
    $city = $_POST['city'];
    $state = $_POST['state'];
    $zip = $_POST['zip'];
    $phone = $_POST['phone'];
    $ext = $_POST['ext'];
    $fax = $_POST['fax'];

    // Job Summary
    $job_title = $_POST['job_title'];
    $positions = $_POST['positions'];
    $hours = $_POST['hours'];
    $age = $_POST['age'];
    $wage = $_POST['wage'];
    $wage_type = $_POST['wage_type'];
    $job_description = $_POST['job_description'];
    $comments = $_POST['comments'];


/*----------------------------------
    Mail Form
----------------------------------*/

    $to      = '[email protected]';
    $subject = 'Subject';
    $headers = 'From: [email protected]' . "\r\n" .
        'Reply-To: [email protected]' . "\r\n" .
        'X-Mailer: PHP/' . phpversion();

    $message = 
        '### Personal Information ###' . "\r\n\r\n" .
        'Prefix: ' . $prefix . "\r\n" .
        'First Name: '. $first_name . "\r\n" .
        'Last Name: ' . $last_name . "\r\n" .
        'Company: ' . $company . "\r\n" .
        'E-Mail: ' . $email . "\r\n" .
        'Title: ' . $title . "\r\n" .
        'Dept.: ' . $dept . "\r\n\r\n";

    $message .= 
        '### Contact Details ###' . "\r\n\r\n" .
        'Address: ' . $address . "\r\n" .
        'Address 2: ' . $address2 . "\r\n" .
        'City: ' . $city . "\r\n" .
        'State: ' . $state . "\r\n" .
        'Phone: ' . $phone . "\r\n" .
        'Ext.: ' . $ext . "\r\n" .
        'Fax: ' . $fax . "\r\n\r\n";

    $message .= 
        '### Job Description ###' . "\r\n\r\n" .
        'Job Title: ' . $job_title . "\r\n" .
        'Positions: ' . $positions . "\r\n" .
        'Hours: ' . $hours . "\r\n" .
        'Age: ' . $age . "\r\n" .
        'Wage: ' . $wage . ' - ' . $wage_type .  "\r\n" .
        'Job Description: ' . $job_description . "\r\n" .
        'Comments: ' . $comments;

    mail($to, $subject, $message, $headers);

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

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

Это сводит меня с ума, я смотрел ВЕЗДЕ для ответов без везения.

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

Я проверил заголовки ответов с инструментами разработчика Chrome, и я получил 200 OK, чтобы вернуться. В чем проблема?

РЕДАКТИРОВАТЬ: Хорошо, я сдаюсь на сегодня через 5 часов. Я могу вернуться завтра и попробовать другие вещи. Сейчас я просто использую complete, что прекрасно работает. Я думаю, что это может быть связано с сервером. Клиент использует IIS...

Ответ 1

Вы не указали код validate.php. поэтому меня это смущает. но вы должны передавать данные в формате JSON, когда почта успешна. Вы можете использовать json_encode(); для этой функции PHP.

добавить jsonencdoe в validate.php в последнем

mail($to, $subject, $message, $headers); 
echo json_encode(array('success'=>'true'));

Код JS

success: function(data){ 
     if(data.success == true){ 
       alert('success'); 
    } 

Надеюсь, что это работает.

Ответ 2

Попробуйте установить свойство response dataType непосредственно:

dataType: 'text'

и поместите

die(''); 

в конце вашего php файла. У вас есть обратный вызов ошибки, потому что jquery не может проанализировать ваш ответ. В любом случае вы можете использовать обратный вызов "complete:", чтобы убедиться, что ваш запрос обработан.

Ответ 3

У меня была та же проблема:

textStatus = 'error'
errorThrown = (empty)
xhr.status = 0

Это точно соответствует моей проблеме. Оказывается, когда я загружал HTML-страницу с моего компьютера, эта проблема существовала, но когда я загружал HTML-страницу с моего веб-сервера, все было в порядке. Затем я попытался загрузить его в другой домен, и снова произошла ошибка. Кажется, это проблема между доменами. (в моем случае, по крайней мере)

Я также пробовал называть его так:

var request = $.ajax({
url: "http://crossdomain.url.net/somefile.php", dataType: "text",
crossDomain: true,
xhrFields: {
withCredentials: true
}
});

но без успеха.

Этот пост решил для меня: jQuery AJAX cross domain