2017-04-11 58 views
0

我用这jQuery代码将数据发送到PHP:反序列化():错误的偏移量537为0字节

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' 
) 
+0

喜,apokryfos PLZ给我正确的代码,表单数据和文件的上传文件发送Ajax请求。 – furkanali89

+0

就像'$ _GET ['code']'和'$ _FILES ['']' – Justinas

+0

一样简单您正在使用Javascript JQuery序列化函数,然后尝试使用PHP反序列化函数。这是两种不同的语言。他们不以同样的方式工作。 – Danack

回答

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]); 
} 
+0

嗨Manish Jangir 它工作正常,但我面临另一个问题,如果我需要发送多个文件,然后如何发送它。 – furkanali89

+0

查看更新的答案。 –

+0

谢谢@Manish Jangir此代码工作正常 – furkanali89

0

您正在尝试发送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);

+0

万一我需要发送多个文件,那么我怎么能发送? – furkanali89

+0

文件?你在这里有表单数据。如上所示,用“push”添加任何你想要的东西。 jQuery的'serializeArray()'返回一个对象数组作为键/值对。 – alpham8