Laravel 3:AJAX POST并返回Response :: download()?

时间:2013-06-01 07:06:49

标签: jquery laravel laravel-3

我正在尝试返回客户端要下载的文件但是我注意到我在控制器中作为返回值放置的任何内容都不会返回给客户端。

以下是代码:

我的控制器中的代码,我删除了不必要的行

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();

  });

1 个答案:

答案 0 :(得分: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类型。