2013-06-01 46 views
1

我想返回一個文件被客戶端下載,但我注意到,我把我作爲一個返回值放在我的控制器中沒有返回到客戶端。Laravel 3:AJAX POST並返回Response :: download()?

下面的代碼:在我的控制器

代碼,我已經刪除不必要的行

public function post_test() 
{ 

    if(Input::get('receive_email')) 
    { 

     $pdf = new Fpdf('P', 'pt', array(1240, 1754)); 

     $pdf->AddPage(); 

     $generated_pdf = $pdf->Output("", "s"); 


     $body = View::make('test.email_collision')->with($data)->render(); 
     $message->body($body); 
     $message->attach(
      $generated_pdf, 
      Sentry::user()->metadata['first_name'] . '_' . Sentry::user()->metadata['last_name'] . '.pdf', 
      'application/pdf'); 
     $message->html(true); 
     $message->send(); 

     if(Message::was_sent()) 
     { 
    // HERE I want to actually return the file to be downloaded 
    // return Response::download($pdf->Output("", "i"); 
      // return $pdf->Output("", "i"); 
     } else { 
      $errors = new Laravel\Messages(); 
      $errors->add('errors', __('test.error_email_not_sent')); 
      return Redirect::back() 
       ->with_errors($errors->messages['errors']); 
     } 

    } 

// Trying to not return anything 
    // return View::make('collide'); 
} 

代碼在我的JS文件,該文件確實在POST

$("#gEmail").bind('touchstart click', function() { 
    $.ajax({ 
     url: document.URL, 
     type: 'POST', 
     data: { 
     receive_email: "1" 
     } 
    }) 
    .fail(function(error) { 
     console.error(error); 
    }); 

    uiComplete.hide(); 

    init(); 

    }); 
+0

$ message有何含義? 此外,您可以通過對應該返回的數據執行dd()來檢查問題出在哪裏,然後監視開發者工具上的響應 –

回答

0

您有以下JS代碼

$.ajax({ 
    url: document.URL, 
    type: 'POST', 
    data: { 
     receive_email: "1" 
    } 
}) 
.fail(function(error) { 
    console.error(error); 
}); 

但你沒有任何success回調在你的代碼,所以,無論你從服務器返回/回聲,它將不可見/可用的客戶端。所以,你需要添加jqXHR.done(),你可以再補充它像

$.ajax({ 
    // ... 
}) 
.done(function(data){ 

}) 
.fail(function(error) { 
    console.error(error); 
}); 

您還可以添加.always()fail()後,像(適合調試)

.always(function(a, textStatus, b) { 
    if (textStatus == "success") { 
     console.log("Success : " + a); 
    } else { 
     console.log("Error : " + b); 
    } 
}); 

此外,check this answer,它會以某種方式幫助您,例如從服務器設置rersponse類型。