使用ajax调用PHP

时间:2016-06-03 13:18:20

标签: javascript php ajax save

编辑:我有各种解决方案,但我不明白为什么ajax无法正常工作。请参阅下面的编辑。

  1. 我想将javascript生成的txt文件保存到客户端计算机。
  2. 我希望用户保持在同一网页上。
  3. 我是通过调用php页面的ajax来完成的。
  4. 我希望它适用于所有主流的PC浏览器; Chrome,Firefox,Internet Explorer和Edge。
  5. 这是我到目前为止所做的:

    htmlsave.js

    dataARR = {
        SaveFile: "This is the content.\nLine2.\nLine3"
    };
    var dataJSON = JSON.stringify(dataARR);
    $.ajax({
        type: "POST",
        url: "htmlsave.php",
        async: true,
        cache: false,
        crossDomain: false,
        data: { myJson: dataJSON },
    
        success: function (data) {
            alert("success");
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert("failure");
        }
    });
    

    htmlsave.php

    <?php
    if(!isset($_POST) || !isset($_POST['myJson'])) {
        exit(0);
    }
    $data = json_decode($_POST['myJson'], true);
    if(!array_key_exists('SaveFile', $data) || !isset($data['SaveFile'])){
        exit(0);
    }
    $contents = strval($data['SaveFile']);
    
    header("Pragma: public"); // required
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: private", false); // required for certain browsers
    header("Content-Type: text/plain");
    header("Content-Disposition: attachment; filename=\"mysavefile.txt\";" );
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: " . strlen($contents));
    ob_clean();
    flush();
    echo $contents;
    ?>
    

    返回的内容(即成功的数据参数)是&#34;这是内容。\ nLine2。\ nLine3&#34;。

    没有提示用内容保存文件&#34;这是内容。\ nLine2。\ nLine3&#34;正如我所希望的那样。

    编辑:解决方案(但不是很好)

    我做了一些修修补补,并以某种方式运作。而不是通过ajax调用我写在我的javascript

    document.location = "htmlsave.php?myJson=Line1Line2";
    

    在我的php中我将其改为

    获取
    if(!isset($_GET) || !isset($_GET['myJson'])) {
        exit(0);
    }
    $contents = $_GET['myJson'];
    

    这很有效。这对于小文件是可以的,但我想做相当大的文本文件,甚至使用lzw编码压缩。有谁知道为什么Ajax不工作?

1 个答案:

答案 0 :(得分:0)

确保htmlsave.php

开头
<?php

如果是,请查看您的网络服务器是否配置为将.php文件传递给您的php实现(fpm,mod_php等等)