【问题标题】:AJAX POST data not being completely sent to serverAJAX POST 数据未完全发送到服务器
【发布时间】:2015-10-21 14:59:51
【问题描述】:

我正在通过我网站上的表单上传 CSV (65KB),使用 papaparse 对其进行解析,然后使用 ajax 将其发布到我的服务器:

console.log(csv)
// if everything is ok, send via AJAX to process with PHP
$.ajax({
    type: "POST",
    url: "scripts/batch_objects.php",
    dataType: 'json',
    data: {'Data': csv},
    success: function(result){
        $("#batchResult").html(result);
    },
    error: function(result) {
        $("#batchResult").html(result);
    },
});

在控制台中,我可以看到 CSV 已正确上传和解析 - 它确认所有行(其中 435 行)都设置在 csv 变量中。在服务器端,我有一个快速脚本来检查:

<?php
    $csv = $_POST['Data'];
    echo count($csv);
?>

但是在服务器端,我只得到了 143 行(echo 语句的输出),而不是全部 435。

我尝试在我的 .htaccess 中设置 php_value post_max_size 20M,但这没有帮助。

【问题讨论】:

  • 你能在 FireBug 或类似的东西中看到实际的发布请求吗?您应该查看数据是否完整地传递到那里的服务器脚本。
  • 您将其作为参数而不是文件中的文本发送。
  • 查看实际的 POST 请求(Chrome 开发者工具 -> 网络选项卡 -> 标头),可以看到所有信息都在标头中发送
  • 您在“数据”参数中输入的文本有多少个字符?
  • 我认为您可以使用phpinfo() 来验证post_max_size 是否实际设置成功。另外,你知道它是给你第 1 行到第 143 行还是中间或最后的某个部分?

标签: php ajax post


【解决方案1】:

以下为我解决的问题(找到灵感here):

// get our data together
var postData = {};
postData.Table = table;
postData.Action = action;
postData.Data = csv;

// if everything is ok, send via AJAX to process with PHP
$.ajax({
    type: "POST",
    url: "scripts/batch_objects.php",
    contentType: "application/json",
    data: JSON.stringify(postData),
    success: function(result){
        $("#batchResult").html(result);
        console.log("Success " + result);
    },
    failure: function(result) {
        $("#batchResult").html('ERROR: ' + result);
        console.log('Eror ' + result);
    },
});

然后在服务器端,您可以通过以下方式访问 POST 数据:

$post_data = json_decode($HTTP_RAW_POST_DATA);

【讨论】:

    猜你喜欢
    • 2018-04-17
    • 1970-01-01
    • 2013-09-19
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    相关资源
    最近更新 更多