2013-05-30 40 views
1

我正在使用Laravel框架,並且正在發送AJAX請求來發送電子郵件。請求正常工作,併發送郵件,問題是如果郵件已成功發送,我無法獲得服務器響應。Laravel AJAX無法獲得回覆

下面的代碼(精簡版)至極坐落在景色/聯繫人/ mail.blade.php:

if(mail($to, $subject, $body,$headers)) { 
    $data = array('text' => Lang::line('contact.mail-success')->get()); 
    return Response::json($data); 
} else { 
    $data = array('text' => Lang::line('contact.mail-error')->get()); 
    return Response::json($data); 
} 

,這裏是jQuery的:

$('#contact-form').submit(function() { 
     var request = $.ajax({ 
      url: BASE+'/contact', 
      type: 'post', 
      data: { name: $('#name').val(), mail: $('#email').val(), message: $('#msg').val() }, 
      dataType:"json", 
      success: function(data){ 
       var message = $.parseJSON(data); 
       alert(message.text); // here I get the "cannot read property of null" in the console log 
      } 
     }); 

    return false; 
}); 

我在做什麼錯?謝謝你的幫助。

+0

是什麼控制檯中的ajax調用的原始響應?你可以檢查嗎?我認爲在刀片視圖中放置「返回」聲明並不是正確的做法。 – migg

+0

使用console.log(數據),我得到一個「空」的答案。 – SimCity

回答

1

由於Laravel發送一個響應:: JSON正確的頭有沒有必要解析JSON在JavaScript,只需將線

var message = $.parseJSON(data); 

改變

var message = data; 
+0

發佈於新帳號下,哎呀。愚蠢的SO。 – clone1018

+0

謝謝你的洞察力,但它仍然無法正常工作。它可能與路由有關嗎?看看[codehappy.daylerees.com](http://codehappy.daylerees.com/ajax-content)上的「JSON響應」部分,我沒有任何地方的代碼。 – SimCity

+0

你可以console.log(數據)(沒有任何形式的解析或任何東西) – clone1018

1

你不應該return Response::json()從視圖文件中,視圖應該回顯視圖中產生的任何輸出,但在這種情況下,您需要從路由本身返回響應,因爲json也會包含標題信息。

+0

哦,jeeze,我不知道他說的查看文件,我認爲這是從控制器完成。 – clone1018

+0

對不起,我沒有說清楚。現在,我使用與controller/contact.php下的視圖相同的代碼和具有以下代碼的路由:'Route :: post('/ contact',array('as'=>'contact','使用'=>'contact @ ajax_mail'));'現在我在控制檯中得到一個「POST http://www.mysite.com/mysite/public/fr/contact 404(Not Found)」錯誤 – SimCity

+0

您能否澄清這是Laravel 3還是Laravel 4?我猜Laravel 3,但只是想確定。 – crynobone

0

雖然以JSON形式發送響應必須使用PHP中的json_encode();進行編碼。成功的到達做方法後然後解析對象爲JSON.parse();

例子:

修改PHP文件中的行 return response()->json(json_encode($data));

JavaScript文件中添加行

done(function (data){ 
console.log(JSON.parse(data)); 
console.log(data.text); 
});