0
AJAXを使用して電子メールを送信しています。受信者に電子メールが送信されます。しかし私が理解していないのは、AJAXのsuccess
コールバックが、電子メールが送信されたにもかかわらずトリガされない理由です。代わりに、error
コールバックがトリガーされます。AJAX POST経由で正常に送信されたが、成功コールバックではなくエラーコールバックが返される
AJAXのurl
パラメータで同じサーバーを使用しているため、明らかにCORSの問題ではありません。また、Google Dev Toolsは問題を報告しておらず、200 OK
と表示しています。
JSコード:
$(document).ready(function(){
$(".js-validate-2").validate({
ignore: ":hidden",
rules: {
//something
},
messages: {
//something
},
submitHandler: function(form) {
var recipient = "[email protected]"
var specifiedProduct = "PRODUCT: " + $('#specifiedProduct').val();
var msg = $('#msg').val();
var phone = "TEL: " + $('#phone').val() + ". ";
var params = {
"email": recipient,
"subject": specifiedProduct,
"body": msg + phone,
};
var sendingToSupport = $.ajax({
url: 'http://myServer/u/support/message',
data: JSON.stringify(params),
type: 'POST',
dataType: 'json',
contentType: 'application/json',
success: function(data) {
console.log("Huge success");
console.log(params);
console.log(data);
alert("Successfully sent!");
},
error: function(data) {
console.log("Huge failure");
console.log(params);
console.log(data);
alert("We apologize for an error!");
$(".support-form").find("input[type=text], textarea").val("");
}
});
}
})
})
返されるデータは有効なjsonですか? 'dataType: 'json''はあなたがそれを期待していると言います。jQueryはそれを構文解析しようとします。それが有効でないか提供されていればエラーとなり、代わりにエラーコールバックを実行します。 – Taplar
応答HTTPコードが成功しなかった場合、 'error'ハンドラがトリガされます。外側 'status> = 200 && status <300 ||ステータス=== 304'。また、レスポンスの形式を逆シリアル化できない場合にも発生します。あなたのケースでは、応答が有効なJSONでない場合に発生します。 –
@Taplarあなたはありがとう、ありがとう。 –