我需要通过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