为什么我的ajax请求总是抛出错误?

时间:2016-11-06 07:08:05

标签: javascript php jquery ajax

这是我的代码:

PHP:

public function export(Request $request){

    $file = "export.txt";
    if(isset($_POST["type"])){
        file_put_contents("$file",$_POST["text"]);
    }
    if (file_exists($file)) {
        header('Content-Description: File Transfer');
        header('Content-Type: text/plain'); // the appropriate header type for txt file
        header('Content-Disposition: attachment; filename="'.basename($file).'"');
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        header('Content-Length: ' . filesize($file));
        readfile($file);
        exit;
    }
}

JS:

    $(document).on('click', '#export', function () {
        var names =  ['علی','فرید'];
        var namess = names.join('\n');
        $.ajax({
            type: "post",
            url: "/export",
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            },
            data: {
                type: "save",
                text: namess
            },
            dataType: "json",
            success: function(){
                var href = '/export?filename=export.txt';
                window.location = href;
            },
            error: function(){
                alert('wrong');
            }
        });
    })

始终error部分执行。我的意思是它始终提醒wrong。我该如何解决?我试图制作一个.txt下载文件。

注意到当我运行此路径时:http://localhost:8000/export?filename=export.txt ..然后会下载export.txt

2 个答案:

答案 0 :(得分:1)

您可以使用以下代码下载:

window.location="export?filename=export.txt";

如果您想发布数据:

   $('<form action="comments.php" method="POST"/>')
        .append($('<input type="hidden" name="type" value="save">'))
       .append($('<input type="hidden" name="text" value="'+ namess +'">'))
        .appendTo($(document.body)) //it has to be added somewhere into the <body>
        .submit();

完整代码:

 $(document).on('click', '#export', function () {

    var names =  ['علی','فرید'];
    var namess = names.join('\n');

     $('<form action="export?filename=export.txt" method="POST"/>')
        .append($('<input type="hidden" name="type" value="save">'))
       .append($('<input type="hidden" name="text" value="'+ namess +'">'))
        .appendTo($(document.body)) //it has to be added somewhere into the <body>
        .submit();

    });

});

答案 1 :(得分:1)

基本上Ajax通常不用于文件下载,但你可以调整以使它感觉到,这就是你所做的唯一的事情就是当请求成功时我们从javascript中弹出一个“document.location”函数来弹出一个新的下载文件的窗​​口。除了你得到的错误之外,通过从最重要的PHP标头开始,例如

,尝试调试PHP代码。
    


    header('Content-Type: text/plain');
    header('Content-Disposition: attachment;filename="'.basename($file).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    ob_clean();
    flush();
    readfile($fileName);
    exit;
    

检查代码是否可以使用最少的信息,如果它工作,然后开始一次添加一个标题,这有助于用最少的信息解决问题。 希望这会有所帮助。