2014-12-18 6 views
-1
запрос

Ajax занимает слишком много времени, чтобы дать ответ назадзапрос Ajax занимает слишком много времени

Jquery код:

<script type="text/javascript"> 
$(document).ready(function() { 
    $('#contactForm').on('submit', function(e) { 
     e.preventDefault(); 

     $.ajax({ 
      type:"POST", 
      url:"<?php echo site_url;?>includes/listContact.php", 
      data:$("#contactForm input").serialize(),//only input 
      success: function(response){ 

        $('#thankMsg').show(); 
        $('#hidediv1').hide(); 
       } 
     }); 


    }); 

}); 
</script> 

и это страница, которая запрашивается АЯКС код:

$file3 = file_get_contents('a.txt', true); 
$data3=json_decode($file3,true); 
$to=$data3['email']; 
$subject="*********************"; 

// To send HTML mail, the Content-type header must be set 
$headers = 'MIME-Version: 1.0' . "\r\n"; 
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
$headers .= 'From: <'.$to.'>' . "\r\n"; 



$message="Hi, <br/><br/>"; 
$message .="*********************** <br/><br/>"; 
foreach($_POST as $key => $value){ 
$message .="<strong>".ucfirst(str_replace('_',' ',$key)).":</strong>  $value<br/>"; 
} 
$message .="<br/><br/><strong>Thanks</strong><br/>"; 


if(mail ("$to", "$subject", "$message", "$headers")) 
{ 
echo "done"; 
} 
else 
{ 
echo "no"; 
} 

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

Благодаря

+2

Попробуйте запустить скрипт PHP без вызова AJAX. Вы все еще получаете очень медленный ответ? – Terry

+0

@Terry да, его время занимает – Gopal

+0

Тогда вы можете сэкономить на возможности проблемы с клиентской версией. Насколько велик объект '$ _POST'? Вы перебираете его. – Terry

ответ

3

Ваш медлительность, скорее всего, в функции mail(). Отправка почты часто занимает много времени, даже если сообщение не очень велико. Чтобы подтвердить это, попробуйте прокомментировать ваш mail(...) и просто сделайте echo "done". Посмотрите, теперь ли это супер быстро.

В зависимости от вашего сервера, mail() может быть подключен к порту sendmail локально или может быть подключен к SMTP-серверу.

Я рекомендую вам попробовать PHPMailer, который позволяет явно указать SMTP или sendmail или использовать встроенную функцию mail(). (PHPMailer также заботится о MIME-заголовке и множестве других полезных вещей.)

Затем вы можете выполнить тесты скорости, чтобы узнать, какая из SMTP или sendmail выполняется быстрее, а затем перейти с более быстрой. Если вам ограничено использование SMTP, тогда PHPMailer позволяет указать более быстрый сервер для отправки.