I need some help with my jquery code as I have got a problem with output for each element from the PHP array when calling ajax function. I have stored the list of elements in the PHP array and I would like to output each element in the jquery loop using ajax but I am unable to do so.
When I try this:
var data = result.data.attachment;
for (var i = 1, len = data[i].length; i < len; i++) {
alert(data.filename);
}
I have also tried this:
var data = result.data.attachment;
for (var i = 1, len = data[i].length; i < len; i++) {
alert(data[i].filename);
}
Output for readDraft.php attachment:
Array
(
[1] => Array
(
[is_attachment] => 1
[filename] => draft_attachment.rar
[attachment] =>
)
)
Array
(
[2] => Array
(
[is_attachment] => 1
[filename] => draft_attachment - Copy.rar
[attachment] =>
)
)
Here is the full jquery code:
$(document).on('click','#openDraft', function(e) {
$.ajax({
url: 'readDraft.php',
type: 'POST',
data : {
email_number: email_number
},
dataType: 'json',
success: function(result) {
console.log(result.data.attachment);
var data = result.data.attachment;
for (var i = 1, len = data[i].length; i < len; i++) {
alert(data.filename);
}
});
});
Here is the full code for readDraft.php:
<?php
$structure = imap_fetchstructure($draft, $email_number);
$overview = imap_fetch_overview($draft, $email_number);
$draft_from = $overview[0]->from;
$draft_to = $overview[0]->to;
$draft_subject = utf8_decode(imap_utf8($overview[0]->subject));
$draft_fulldate = $overview[0]->date;
$draft_date = convDate($draft_fulldate);
$draft_message = quoted_printable_decode(imap_fetchbody($draft, $email_number, 1.2));
$attachments = array();
if(isset($structure->parts) && count($structure->parts)) {
for($i = 0; $i < count($structure->parts); $i++) {
if($structure->parts[$i]->ifdparameters) {
foreach($structure->parts[$i]->dparameters as $object) {
if(strtolower($object->attribute) == 'filename') {
$attachments[$i]['is_attachment'] = true;
$attachments[$i]['filename'] = $object->value;
}
}
}
if($structure->parts[$i]->ifparameters) {
foreach($structure->parts[$i]->parameters as $object) {
if(strtolower($object->attribute) == 'name') {
$attachments[$i]['is_attachment'] = true;
$attachments[$i]['filename'] = $object->value;
}
}
}
if($attachments[$i]['is_attachment']) {
$attachments[$i]['attachment'] = imap_fetchbody($connection, $message_number, $i+1);
if($structure->parts[$i]->encoding == 3) { // 3 = BASE64
$attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']);
}
elseif($structure->parts[$i]->encoding == 4) { // 4 = QUOTED-PRINTABLE
$attachments[$i]['attachment'] = quoted_printable_decode($attachments[$i]['attachment']);
}
}
}
}
$data = array("receipt"=>$draft_to, "subject"=>$draft_subject, "encryption"=>$email_number_encrypt, "message"=>$draft_message, "attachment"=>$attachments);
$response = array("data"=>$data, "success"=>"successfully", "total_inbox"=>$total_inbox_unread, "total_spam"=>$total_spam_unread);
echo json_encode($response);
?>
Here is the console log:
1: {filename: "draft_attachment.rar"}
2: {filename: "draft_attachment - Copy.rar"}
What happens is when I'm calling the ajax function, there is no alert display so there is something wrong. What I'm expecting to do is when I am calling ajax function, I want to set the alert to display for each filename using the index value.
Can you please show me an example how I could output for each filename using the index value when I am using ajax function?
Thank you.
alert(result.data.attachment[1].filename);andalert(result.data.attachment[2].filename);so I getdraft_attachment.raranddraft_attachment - Copy.raras a return string.console.login the quoted code.console.login the quoted code.