Wie können Sie zwei Ajax-Aufrufe zusammenführen, so dass sie Formular-Eingabedaten sowie Formularbilddaten mit der API formData übergeben?Senden von Formularstringdaten und Bilddaten in einem einzigen Ajax-Aufruf
Ansicht Ajax Anrufe:
$("#submitbmsymptom").click(function(h){
h.preventDefault();
var radioValue;
$('#radio1, #radio2, #radio3, #radio4').each(function(){
if($(this).is(':checked')){
radioValue = $(this).val();
}
});
console.log(radioValue +
$("#bmdate").val() +
$("#bmtime").val() +
$("#bmscale").val() +
$("#bmpainlevel").val() +
$("#bmobs").val()
);
$.ajax({
url:'urllocation',
method: 'POST',
data:{
bmdate_data : $("#bmdate").val(),
bmtime_data : $("#bmtime").val(),
bmscale_data : $("#bmscale").val(),
bmcontents_data : radioValue,
bmpainlevel_data : $("#bmpainlevel").val(),
bmobs_data : $("#bmobs").val(),
},
}
).done(function(regresult){
});
})
$("#submitbmsymptom").click(function(h){
h.preventDefault();
var pooPicture = $('input[name=poopic]');
var fileUpload = pooPicture[0].files[0];
var formData = new FormData();
formData.append("file", fileUpload);
$.ajax({
url:'urllocation',
method: 'POST',
data: formData,
processData: false,
contentType: false,
success: function() {
alert("File uploaded");
}
});
})
Controller-Methode, die Daten empfängt, speichert die Datei auf dem Server und fügt dann die String-Daten und Dateinamen in eine Datenbank ein assoziatives Array mit:
function bowelmovements(){
$bmuserid = $this->session->userdata('id');
$bmsymptomdate = $this->input->post('bmdate_data');
$bmsymptomtime = $this->input->post('bmtime_data');
$bmsymptomtype = $this->input->post('bmscale_data');
$bmsymptomlocation = $this->input->post('bmcontents_data');
$bmsymptompainlevel = $this->input->post('bmpainlevel_data');
$bmsymptomobs = $this->input->post('bmobs_data');
$config['upload_path'] = APPPATH.'/assets/uploads/';
$config['allowed_types'] = "gif|jpg|png|mp4";
$this->load->library('upload', $config);
if($this->upload->do_upload("file")){
$imageData = $this->upload->data();
$fileName = $imageData[file_name];
$bmdata = array(
'userid' => $bmuserid,
'bmdate' => $bmsymptomdate ,
'bmtime' => $bmsymptomtime,
'bmscale' => $bmsymptomtype,
'bmcontents' => $bmsymptomlocation ,
'bmpainlevel' => $bmsymptompainlevel,
'bmobs' => $bmsymptomobs,
'bmimage' => $fileName
);
$insertBM = $this->poomonitormodel->insertBM($bmdata);
}
else{
echo "File not uploaded";
}
}
Momentan wird nur der zweite Ajax-Aufruf gesendet und nur der Dateiname in die Datenbank eingefügt. Ich benötige jedoch beide Datensätze, um sie in die Tabelle zu übertragen.
Danke.
Ich reparierte habe den Aufruf Fehler war es mit nicht zu tun Bereitstellung content/verarbeite als falsch erklärt, aber es ist nicht das Extrahieren Bild im Controller. Ich nehme an, es erfordert einen anderen Zugang. – gideveloper
@gideveloper - der einzige undefinierte Typfehler, den ich beim Testen hatte: 'TypeError: pooPicture [0] ist undefiniert', ist das das selbe was du bekommst? – Derek
Nein, hatte nie so einen Fehler. Wie ich oben gepostet habe, korrigierte ich das erste Problem mit 'contentType: False, dataType: False' Allerdings erhalte ich keine Daten in meinem Controller, um den Rest der Funktion wie das Speichern der Datei auszuführen. – gideveloper