2016-05-12 80 views
1

我需要通過jQuery發送POST數據到我的PHP服務器。這就是我目前正在接受(這是我想):

client_id: 55 
client_name: 'Josh' 
age: '35' 
extra: array(0) -> array(['preview'] -> true, ['lookup'] -> false) 

而要達到這一點,我有以下代碼:

var elements = []; 
var listOfExtra = [] 

listOfExtra.push({'preview': true, 'lookup': false}); 

elements['client_id'] = 55; 
elements['client_name'] = 'Josh'; 
elements['age']   = 35; 
elements['extra']  = listOfExtra; 

$.post(url, $.extend({}, elements)); 

但現在我還需要發送文件中的用戶上傳,所以通過這樣做:

elements['file'] = event.target.files[0]; 

我收到消息Illegal invocation在JavaScript

因爲這沒有工作,我試圖執行一個formData()

var formData = new FormData(); 

formData.append('client_id', 55); 
formData.append('client_name', 'Josh'); 
formData.append('age', 35); 
formData.append('extra', listOfExtra); 
formData.append('file', event.target.files[0]); 

$.ajax(
{ 
    url: url 
    type: 'POST', 
    data: formData, 
    processData: false, 
    contentType: false 
}); 

什麼情況是,現在的extra[object][object],這是確定的,所以我只需要字符串化它。

formData.append('extra', JSON.stringify(listOfExtra)); 

現在的問題是,我有很多的使用$_POST['extra'][0]['preview'](例如)代碼,現在我需要之前,它的所有解碼和使用大量的條件,如:

$extra = isset(json_decode($_POST['extra'])[0]['preview']); 

if($extra != null) 
    $extraContent = json_decode($_POST['extra'])[0]; 

$preview = (isset($extraContent) ? $extraContent->preview : $extra[$_POST['extra'][0]['preview']); 

是有什麼辦法通過使用formData()$.post我可以保持從JavaScript發送的值到PHP像我想要的和發送文件?

回答

0

一個簡單的方法是,不使用jQuery對於只是簡單

var xhr = new XMLHttpRequest(); 
xhr.send(formData); 

它應該做的一切正確的事情,但只有在現代瀏覽器上運行(不知道如果你需要舊的太)。兼容性請看http://caniuse.com/#feat=xhr2

+0

你試過嗎?它對你有用嗎? –

0

已解決

我將解碼的JSON值再次轉換爲正常的$_POST

$extraContent = json_decode($_POST['extra'])[0]; 

foreach($extraContent as $key => $extra) 
    $_POST[$key] = $extra;