2013-09-06 19 views
5

newbie question, bir e-postanın gönderilip gönderilmediğini ve sonucun gösterilip gösterilmediğini bulmaya çalışıyor, işe yaramıyor gibi görünüyor.Jquery Ajax - Dönüş Boole?

function SendPreview() { 
    var value = CKEDITOR.instances['Source'].getData(); 
    alert(value); 
    var model = { EmailBody: value.toString(), EmailTo: $("#SendTo").val(), EmailSubject: $("#Subject").val() }; 
    var request = $.ajax({ 
     url: '/Campaign/SendPreviewEmail', 
     async: false, 
     type: 'POST', 
     dataType: 'JSON', 
     data: { model: JSON.stringify(model) }, 
     cache: false, 
     success: function (data) { 
      if (data) { 
       alert("Message Sent"); 
      } else { 
       alert("Message Not Sent, Please check details"); 
      } 
     } 
    }); 
} 
[HttpPost] 
[ValidateInput(false)] 
public bool SendPreviewEmail(string model) 
{ 
    var e = new EmailPreview(); 
    JavaScriptSerializer objJavascript = new JavaScriptSerializer(); 

    e = objJavascript.Deserialize<EmailPreview>(model); 
    if (!string.IsNullOrEmpty(e.EmailTo) && !string.IsNullOrEmpty(e.EmailSubject) && !string.IsNullOrEmpty(e.EmailBody)) 
    { 
     if (IsValidEmail(e.EmailTo)) 
     { 
      _mailService.SendMail(account.Email, e.EmailTo, e.EmailSubject, e.EmailBody, true); 
      return true; 
     } 
    } 
    return false; 
} 
+0

sorunu ne? –

+0

Bu her zaman bunu (veri) kontrol eder. Xhr.responseText == "bir şey" gibi bir şey kullanmak isteyebilirsiniz. Durumu kontrol etmek için. –

+0

Şu andaki kodla ne olur? – Dutts

cevap

11

bu ASP.Net MVC olduğunu varsayarsak olabilir, sen ret bir edilmelidir Bir ActionResult'u eyleminizden (veya en azından ondan türeyen bir şeyden) alma. Bir sonraki sorun ise true'un toString() anlamına gelmesi "True" veya "False" dizgisi ile sonuçlanacak bool değerinde çağrılacaktır. Her ikisi de javascript'te true'a eşit olduğunu unutmayın. Bunun yerine, sonuç bayrağı içeren JSON'u döndür.

jQuery kodunda, kullanmak için gerçekten kötü bir uygulama olan async: false'u da ayarladınız. Aslında, konsolu kontrol ederseniz, tarayıcının kullanımıyla ilgili uyarılarını görürsünüz. AJAX isteğinin eşzamansız olarak yapılması için bu özelliği kaldırmanız gerekir. Ayrıca, ajax() numaralı çağrıya dataType değerini JSON olarak ayarladınız, ancak aslında bir dizge döndürüyoruz. Bu yerine deneyin:

function SendPreview() { 
    var value = CKEDITOR.instances['Source'].getData(); 
    var model = { EmailBody: value.toString(), EmailTo: $("#SendTo").val(), EmailSubject: $("#Subject").val() }; 
    var request = $.ajax({ 
     url: '/Campaign/SendPreviewEmail', 
     type: 'POST', 
     dataType: 'JSON', 
     data: { model: JSON.stringify(model) }, 
     cache: false, 
     success: function (data) { 
      if (data.emailSent) { // note the object parameter has changed 
       alert("Message Sent"); 
      } else { 
       alert("Message Not Sent, Please check details"); 
      } 
     } 
    }); 
} 
[HttpPost] 
[ValidateInput(false)] 
public ActionResult SendPreviewEmail(string model) 
{ 
    var e = new EmailPreview(); 
    var result = false; 
    JavaScriptSerializer objJavascript = new JavaScriptSerializer(); 

    e = objJavascript.Deserialize<EmailPreview>(model); 
    if (!string.IsNullOrEmpty(e.EmailTo) && !string.IsNullOrEmpty(e.EmailSubject) && !string.IsNullOrEmpty(e.EmailBody)) 
    { 
     if (IsValidEmail(e.EmailTo)) 
     { 
      _mailService.SendMail(account.Email, e.EmailTo, e.EmailSubject, e.EmailBody, true); 
      result = true; 
     } 
    } 
    return Json(new { emailSent = result }); 
} 
+0

MVC – Amit

+0

'den bahsedilmiyor. C# kodundan başka bir şey yok. –

+0

Jquery AJAX, ASP MVC veya PHP'den bağımsız olarak aynıdır. Her neyse, bu çok iyi bir cevap ... –

2

Aslında return tarayıcıya geri şey göndermez, tarayıcı, muhtemelen Response.Write değil, bu tanıdık bir geri gönderilmek üzere veri yazmak zorunda.

Ayrıca istemci tarafında

if (data) 

herhangi veri tarayıcıya geri gönderilir eğer true değerlendirmek, böylece gerçek verileri kontrol etmek gerekir, böyle bir şey olabilir edeceğiz herhangi bir veri için aynıdır

if (data == 1) 

Veya, json için, bu

if (data.success) // if you send a json response.