簡體   English   中英

jQuery使用$ .post上傳文件

[英]jQuery using $.post to upload file

我需要通過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];

我在javascript中收到了Illegal invocation的消息

由於這不起作用,我試圖實現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的值並發送文件?

一個簡單的方法是,不要簡單地使用jQuery

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

它應該做所有正確的事情,但只適用於現代瀏覽器(不知道你是否也需要舊的瀏覽器)。 有關兼容性,請訪問http://caniuse.com/#feat=xhr2

解決了

我再次將解碼的JSON值轉換為普通的$_POST

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM