1

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

这是代码:

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

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

  });
4

1 回答 1

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()after fail(),例如(适合调试)

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

另外,检查这个答案,它会以某种方式帮助你,比如从服务器设置响应类型。

于 2013-09-25T22:01:05.467 回答