2017-04-11 95 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