【问题标题】:unserialize(): Error at offset 0 of 537 bytesunserialize():537 字节偏移量 0 处出错
【发布时间】:2017-04-11 08:47:07
【问题描述】:

我正在使用这个 jQuery 代码向 PHP 发送数据:

var fromdata2 = $('#form').serialize();
var file_data = $('#fileid').attr('files')[0];
var fromdata = new FormData();
fromdata.append('fileid', file_data);
fromdata.append('post_data', fromdata2);

$.ajax({
    type: "POST",
    cache: false,
    contentType: false,
    processData: false,
    data: fromdata,
    dataType: "json",
    url: "url",
    success: function (data)
    {
       alert("success");
    }
});

我以这种形式收到数据:

code=&id=&CTR_ID=&ctr_name=asdsadsad&air_name=Action+Airlines&air_uniCode=XQ&ctr_strDate=04%2F11%2F2017&ctr_endDate=04%2F11%2F2017&ctr_docNameHid=5337XXXXXXXXXX78_09-06-2016&recstatus_val=1

但是当我尝试处理它时,使用以下代码:

var_dump(unserialize($data));

我收到此错误:

unserialize(): Error at offset 0 of 537 bytes.

如何反序列化它,在数组中查找结果,如下所示:

array(
code=>,
id=>,
CTR_ID=>,
ctr_name=>'asdsadsad'
)

【问题讨论】:

  • 嗨,apokryfos 请给我发送正确的代码,用于发送带有表单数据和文档上传文件的 AJAX 请求。
  • 就像$_GET['code']$_FILES['']一样简单
  • 您正在使用 Javascript JQuery 序列化函数,然后尝试使用 PHP 反序列化函数。那是两种不同的语言。它们的工作方式不同。

标签: php jquery


【解决方案1】:

正如@apokryfos 在评论中所说,您可以使用parse_str 来解析查询字符串,如下所示:

$queryString = "code=&id=&CTR_ID=&ctr_name=asdsadsad&air_name=Action+Airlines&air_uniCode=XQ&ctr_strDate=04%2F11%2F2017&ctr_endDate=04%2F11%2F2017&ctr_docNameHid=5337XXXXXXXXXX78_09-06-2016&recstatus_val=1";

parse_str($queryString, $queryArray);

print_r($queryArray);

上传多个文件:

var ins = document.getElementById('fileid').files.length;
for (var x = 0; x < ins; x++) {
    fromdata.append("fileid[]", document.getElementById('fileid').files[x]);
}

【讨论】:

  • 嗨 Manish Jangir,它工作正常,但如果我需要发送多个文件,我会遇到另一个问题,那么如何发送它。??
【解决方案2】:

您正在尝试发送 JSON 数据,但您给它的形式是 url 编码的数据,这是两个不同的东西。如果您想发送 JSON,只需执行以下操作:

var form_data = $("#form").serializeArray()
form_data.push({fileid: $('#fileid').attr('files')[0]});

$.ajax({
    type: "POST",
    cache: false,
    contentType: false,
    processData: false,
    data: fromdata,
    dataType: "json",
    url: "url",
    success: function (data)
    {
       alert("success");
    }
});

然后在 PHP 端执行 json_decode(file_get_contents('php://stdin'), true);

【讨论】:

  • 文件?您在这里有表单数据。如上所示,使用push 添加您想要的任何内容。 jQuery 的 serializeArray() 返回一个对象数组作为键/值对。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多