我在尝试访问internal service 500
方法时遇到Call to a member function move() on a non-object
错误,原因为Input::file('uploadname');
。
如果我使用以下代码执行var转储:
echo '<pre>';
var_dump(Input::all());
echo '</pre>';
我得到的结果是该字段中有数据,但是当访问Input::hasFile('uploadname');
时,它会给出错误吗?
以下是表单代码:
<div id="div123">
<input type="button" value="Upload CV" class="uploadCV">
</div>
<div id="uploadbutton">
<input type="file" name="upload_cv_company_rep" class="cv" id="upload_cv_company_rep"/>
</div>
显示按钮,当您单击它时,它会触发input type="file"
内容。
它在控制台中显示以下var_dump
:
我控制器中的代码是:
public function uploadUser() {
if(Input::hasFile('upload_cv_company_rep')) {
Input::file('upload_cv_company_rep')->move('uploads/');
} else {
echo '<pre>';
var_dump(Input::all());
echo '</pre>';
}
}
这是ajax部分:
$("#upload_employee_form").submit(function(e){
// e.preventDefault();
// alert("hey");
var d = new FormData(document.getElementById('upload_employee_form'));
d.append('password', $('.password').val());
d.append('referencecode', $('.ref_code').val());
console.log(d);
$.ajax({
url: '/laravel/rsms/public/company-representative-create-user',
data: d,
type: 'POST',
processData: false,
success: function(res) {
console.log(res);
alert("Success!");
},
error: function() {
alert("Something went wrong!");
}
});
return false;
});
答案 0 :(得分:0)
不,这不是应该做的:
var d = new FormData(document.getElementById('upload_employee_form'));
d.append('password', $('.password').val());
d.append('referencecode', $('.ref_code').val());
^你做错了。首先,当包含jquery时,使用本机DOM选择器没有意义。其次,如果您稍后添加更多字段该怎么办?你必须d.append(...)
那些字段。
发送序列化表单的正确且非常常见的方法,包括文件:
$("form").submit(function(event){
event.preventDefault();
var data = new FormData($(this)[0]);
$.ajax({
// Note, both processData and contentType should be set to false
processData : false,
contentType : false,
url : "/laravel/rsms/public/company-representative-create-user",
data : data,
success : function(response) {
alert(response);
}
});
});
即使您将来添加了一些字段,也不再需要d.append()
。表单序列化完全是动态的。
至于服务器端,继续做你现在应该做的事情