我在ajax方面遇到了问题,事实上,我试图在提交之前用ajax将值发送到我的上传函数。但是,当我在php代码中检查$_POST数组时,只有表单的值,而没有来自ajax的值,我不知道为什么。这是我的代码:
HTML:
<button id="btn_saisie" class="btn btn-app saver adddocu" ><i class="fa fa-save whiter"></i></button>
<form action="/uploader/adddocu" id="form_saisie" class="form_saisie" method="POST" enctype="multipart/form-data">
<input type="file" name="document" class="val_peage form-control form_num" id="document" data-rest="document" placeholder="Document">
<input type="text" name="description" class="val_parking form-control form_num" id="description" data-rest="description" placeholder="Description">
JS:
$( ".adddocu" ).click(function() {
if ($('#document').val() != "" && $('#description').val() != ""){
api_sendvalue_adddoc();
}
if ($('#document').val() == "")
alert('test');
else if ($('#description').val() == "")
alert('test2'); });
function api_sendvalue_adddoc(){
user = JSON.parse(sessionStorage.getItem('user'));
pays = localStorage.getItem("pays");
magasin = localStorage.getItem("magasin");
$.ajax({
type: 'POST',
url: '/uploader/adddocu',
data: {pays:pays, magasin:magasin},
success: function(data){
alert(data);
$("#form_saisie").submit();
console.log(data);
},
error: function(xhr){
alert(xhr.responseText);
console.log(xhr.responseText);
}
}); }
PHP:
public function adddocu(){
$path = './asset/upload/pdf/';
$path2 = '/asset/upload/pdf/';
$config['upload_path'] = $path;
$config['encrypt_name'] = false;
$config['file_ext_tolower'] = true;
$config['allowed_types'] = 'pdf';
// die(var_dump($_POST));
$this->load->library('upload', $config);
foreach($_FILES as $id => $name)
{
$this->upload->do_upload('document');
$upload_data = $this->upload->data();
$url = $path2 . $upload_data['file_name'];
$data = array('nom' => $upload_data['raw_name'], 'description' => $_POST['description'], 'url' => $url, 'user_id' => '17');
$this->db->insert('pdf', $data);
}
redirect("/login/docu");
}
因此,当我var_dump$_POST数组时,我只有"description"的值,而没有"pays"answers"magasin"的值。
你能帮我吗?
谢谢你抽出时间。
似乎您正在访问本地存储值,您正在将其发布到某个位置,然后提交表单。
你提交的表格中没有这个pays
&magasin
,所以我有一个技巧,你可以使用它来实现。
在HTML表单中创建两个隐藏的输入,如
<input type="hidden" name="pays" id="pays">
<input type="hidden" name="magasin" id="magasin">
现在,在ajax调用之前,在从本地存储获取值之后,给它们赋值,如下所示。
user = JSON.parse(sessionStorage.getItem('user'));
pays = localStorage.getItem("pays");
magasin = localStorage.getItem("magasin");
$("#pays").val(pays);
$("#magasin").val(magasin);
$.ajax({ .... });
继续您的代码并享受。希望它对你有用。
问题是因为您没有阻止form
正常提交,所以AJAX请求被取消。不使用button
的click
事件,而是挂接到form
的submit
事件并调用preventDefault()
。试试这个:
$('#form_saisie').submit(function(e) {
e.preventDefault();
if ($('#document').val() != "" && $('#description').val() != ""){
api_sendvalue_adddoc();
}
if ($('#document').val() == "")
alert('test');
else if ($('#description').val() == "")
alert('test2');
});
编辑:
下面是一个ajax post-to-codeigniter的工作示例:
查看
<script>
$( document ).ready(function () {
// set an on click on the button
$("#button").click(function () {
$.ajax({
type: 'POST',
url: "[page]",
data: {pays: "asd", magasin: "dsa"},
success: function(data){
alert(data);
$("#text").html(data);
console.log(data);
},
error: function(xhr){
alert(xhr.responseText);
console.log(xhr.responseText);
}
});
});
});
</script>
控制器
<?php
// main ajax back end
class Time extends CI_Controller {
// just returns time
public function index()
{
var_dump($_POST);
echo time();
}
}
?>
输出
array(2) {
["pays"]=>
string(3) "asd"
["magasin"]=>
string(3) "dsa"
}
1473087963
此处的工作示例
因此,您应该在开发控制台上检查您从AJAX发出的请求。在那里,您应该得到var_dump($_POST(的响应。
要进行调试,请尝试让您的控制器只返回$_POST数据,对其余数据进行注释。在javascript方面,同样的事情,只测试ajax帖子和接收到的数据。