我有一个通过$ .post处理的表单,将数据发送到php脚本。我的客户刚要求我提供使用此(以及其他一些)表单上传图像的功能。
我一直在谷歌搜索大约一个小时,并且没有看到任何证据表明你可以使用$.post()
实际做到这一点,所以我想伸手去看看是否有办法做此
表单以这种方式处理:
jQuery( '.js-saveProduct' ).click(function(e) {
e.preventDefault();
acSaveProduct( jQuery(this).serializeArray() )
};
var acSaveProduct = function( form ) {
var _data = {
action: 'ac_save_product',
form: JSON.stringify( form )
}
jQuery.post(
ajaxscript.ajaxurl,
_data,
function( response ) {
// Do Stuff
}
);
};
如果在调用console.log(form)
之后我acSaveProduct()
,则上传字段甚至不会记录在被记录的对象数组中。
我还没有开始PHP的这一方面,因为我知道传递给我的PHP函数的表单对象不包含我正在寻找的值。
编辑以显示新的尝试
所以,尝试@Andreas链接的技术,我仍然遇到麻烦。下面是我的更新jQuery / PHP代码:
HTML
<input type="file" name="acImageNew" id="acImageNew">
的jQuery
var acSaveProductAlt = function( form ) {
var file_data = jQuery( '#acImageNew' ).prop('files')[0];
var form_data = new FormData();
form_data.append('file', file_data);
alert(form_data);
jQuery.ajax({
url: the_ajax_script.ajaxurl,
dataType: 'json',
cache: false,
contentType: false,
processData: false,
data: form_data,
type: 'post',
action: 'ac_ajax_save_product_alt',
success: function( response ) {
alert(JSON.parse(response.success));
}
});
};
PHP
function ac_ajax_save_product_alt(){
if ( 0 < $_FILES['file']['error'] ) {
echo 'Error: ' . $_FILES['file']['error'] . '<br>';
}
else {
move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $_FILES['file']['name']);
}
$response = json_encode(
array(
'success' => true,
)
);
header( "Content-Type: application/json" );
echo $response;
exit;
}
最后,我收到一条警告0
作为警报的内容。我做错了什么?
答案 0 :(得分:1)
首先尝试JSON解析响应,然后访问interface Copyable {
Copyable copy();
}
class ImplA implements Copyable {
private String field;
public ImplA(ImplA implA) {
this.field = implA.field;
}
@Override
public ImplA copy() {
return new ImplA(this);
}
// other constructors and methods that mutate state.
}
class ImplB extends ImplA {
private int value;
private final List<String> list; // This field could not be final if we used clone.
public ImplB(ImplB implB) {
super(implB); // Here we invoke the copy constructor of the super class.
this.value = implB.value;
this.list = new ArrayList<>(implB.list);
}
@Override
public final ImplB copy() {
return new ImplB(this);
}
// other constructors and methods that mutate state.
}
密钥。
success