2017-01-03 49 views
0

我收到下面的示例表單,其中beforeSend函數顯示正在發送的消息,一旦發送了其他函數,則稱爲.done(function (data),顯示消息已發送的消息。所有我想要做的就是使用其中不發送該郵件的另一個功能,顯示消息「的錯誤,則不會發送消息」未發送電子郵件時顯示錯誤

var form = $('#main-contact-form'); 
form.submit(function (event) { 
    $.ajax({ 
     type: 'POST', 
     url: '../sendemail.php', 
     data: { 
      Name: name, 
      Subject: $form.find("input[name='subject']").val(), 
      Email: email, 
      message: $form.find("textarea[name=message]").val(), 
     }, 
     beforeSend: function() { 
      // message is sending... 
     }     
    }) //end ajax 
    .done(function (data) { 
     // message sent! 
}); 
});//end contact form 
+0

嘗試發送電子郵件之前提高的標誌(假)和如果郵件發送成功,並且檢查標誌已完成,對於相應的消息,則提升標誌(True) – Vaibhav

+0

這不是短信它是電子郵件 – csandreas1

回答

1
  1. 您可以使用失效API,如下所示處理錯誤。
  2. 另外,在$ .ajax({constObj})中,您可以使用apis來處理相同的成功和錯誤。

參見 here for more info

//1. 

$.ajax({ 
      type: 'POST', 
      url: '../sendemail.php', 
      data: { 
       Name: name, 
       Subject: $form.find("input[name='subject']").val(), 
       Email: email, 
       message: $form.find("textarea[name=message]").val(), 
      }, 
      beforeSend: function() { 
      // message is sending... 
      }     
     }) //end ajax 

     .done(function (data) { 
     // message sent! 

     }) 
     .fail(function(){ 
      //handle error here 
     }); 

// 2。

constObj.success(function(data){ 
}); 

constObj.error(function(error){ 
}); 
+0

當我添加失敗功能時,我的整個聯繫表單不起作用我是否需要包含任何庫? – csandreas1

+0

實際上我得到一個錯誤 – csandreas1

+0

添加fail()函數時,你得到了什麼錯誤。無論如何使用方法2是更優選的。 –

1

代替.done使用AJAX選項successerror。發送電子郵件失敗時在服務器上發生錯誤。

$.ajax({ 
    success: function() { 
     // message sent! 
    }, 
    error: function() { 
     // message sent failed! 
    } 
}); 

在服務器端:

if ($this->sendMessage()) { 
    echo "ok"; 
} else { 
    throw new Exception('Email failed to send.', 500); 
} 

如果用戶實際收到的電子郵件(我想有一些複雜的方式來弄明白)你不能告訴。

0

您使用done(),它是在SUCCESSFUL ajax請求(通常返回HTTP 200)後執行的。如果您閱讀http://api.jquery.com/jquery.ajax/,則會出現fail(),這是在FAILED ajax請求後執行的。

它也取決於sendemail.php的輸出。如果你的PHP返回比HTTP 200其他錯誤時,你可以利用失敗()承諾的方法,例如...

$.ajax({ 
    beforeSend: function() { 
     $('msg').text('Sending email...'); 
    } 
}).done(function() { 
    $('#msg').text('Success!'); 
}).fail(function() { 
    $('#msg').text('Failed!'); 
}); 

但是,如果你的PHP也返回HTTP 200錯誤時,你可以這樣做的下面...

PHP:

$response = array(
    'status' => null, 
    'error' => null 
); 

if ($mailer->send()) { 
    $response['status'] = true; 
} else { 
    $response['status'] = false; 
    $response['error'] = 'Unable to send email'; 
} 

的jQuery:

$.ajax({ 
    beforeSend: function() { 
     $('msg').text('Sending email...'); 
    } 
}).done(function(data) { 
    if (data.status === true) { 
     $('#msg').text('Success!'); 
    } else { 
     $('#msg').text('Failed: ' + data.error); 
    } 
}); 
+0

我認爲你的jQuery代碼是錯誤的,我嘗試你的代碼,我得到錯誤,但電子郵件發送。並且beforeSend函數永遠加載 – csandreas1

+0

這不是一個完整的jQuery代碼,只是一個例子,如何使用done()和fail()promise方法 –