Php 使用ajax将文件发送到服务器
以下是我的看法:Php 使用ajax将文件发送到服务器,php,ajax,yii,Php,Ajax,Yii,以下是我的看法: <?php $modelupload=new Upload; ?> <?php $form=$this->beginWidget('CActiveForm', array( 'id'=>'upload-upload', 'enableAjaxValidation'=>false, 'htmlOptions'=>array( 'onsubmit'=>"return false;",
<?php $modelupload=new Upload; ?>
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'upload-upload',
'enableAjaxValidation'=>false,
'htmlOptions'=>array(
'onsubmit'=>"return false;",
'enctype' => 'multipart/form-data',
),
)); ?>
<div class="row">
<?php echo $form->labelEx($modelupload,'New name'); ?>
<?php echo $form->textField($modelupload,'Name'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($modelupload,'File'); ?>
<?php echo $form->fileField($modelupload,'Extra'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($modelupload,'Description'); ?>
<?php echo $form->textArea($modelupload,'Description'); ?>
</div>
<?php echo CHtml::Button('Upload',array('onclick'=>'upload();')); ?>
<?php $this->endWidget(); ?>
<script type="text/javascript">
function upload(){
var data=new FormData($("#upload-upload")[0]);
var extra={data1:"some text i want to attach",data2:"more text"};
data={data:data,extra:extra};
$.ajax({
type:"POST",
url:'<?php echo Yii::app()->createAbsoluteUrl("site/upload"); ?>',
data:{"command":data},
dataType:"json",
processData: false,
contentType: false,
success:function successFunc(arr){
alert(arr['text']);
},
error:function errorFunc(){
alert("Something went wrong.");
}
})
}
</script>
当我在服务器上检查$\u POST['command']时,它说它没有设置,整个数组$\u POST是空的。。。无需上传文件即可正常工作,但有了文件和多部分/表单数据,我无法使其正常工作
如何上传文件+从其他表单字段附加信息+附加我自己的信息?我尝试了一些方法,也阅读了其他人的问题,但我无法得到我想要的结果。我编写了自己的XMLHttpRequest,而不是使用ajax,它成功了!我可以使用
$arr=explode(',',$_POST['command']);
和我的档案
$file=CUploadedFile::getInstanceByName('File');
。。。我想这比使用ajax更好,但我仍然想知道如何使它与ajax一起工作
function upload(){
var data=new FormData();
var input=document.getElementById('Upload_Extra');
var command=[$("#Upload_Name").val(),$("#Upload_Description").val(),"Some text I want to attach","more text"];
data.append("command",command);
data.append('File',input.files[0]);
var xhr=new XMLHttpRequest();
xhr.open('POST','<?php echo Yii::app()->createAbsoluteUrl("admin/upload");?>',true);
xhr.onload=function(){
if (this.status==200){
var resp=JSON.parse(this.response);
alert(resp.text);
};
};
xhr.onerror=function(){
alert("Something went wrong.");
}
xhr.send(data);
}
也许你可以用这个来解决问题
也许做一个ajax调用可以帮助你更好地解决你的问题
在服务器端。。。检索数据
if(isset($_POST['ModelName'])) or print_r($_POST);
并使用控制台。。。。或者简单的REST客户端调试…如果额外的var数据不依赖。。。你可以用两个隐藏的文件来做。。。也不要使用onclick函数。。。通过将clientValidation设置为true使用afterValidate,在clientOptions中使用afterValidate函数,其中使用相同的技术调用上载函数。。。并返回false以避免重定向以同步表单提交。。。并在控制台chrome中检查正在传递的数据。。
<input type="hidden" name="ModelName[hiddenFiels1]" id="ModelName_hiddenFiels1" value="desired data" />
<input type="hidden" name="ModelName[hiddenFiels2]" id="ModelName_hiddenFiels2" value="desired data" />
function upload(){
var data = new FormData(form[0]);
$.ajax({
"type":"POST",
"url":form.attr('action'),
"data": data,
"async": false,
"success":function(data){
alert('success');
},
"cache": false,
"contentType": false,
"processData": false,
});
}
if(isset($_POST['ModelName'])) or print_r($_POST);