Передача вложенного массива Javascript в PHP с использованием Ajax во внешнем файле Javascript

Я хочу передать вложенный массив JavaScript, который динамически генерируется в файл php, чтобы позже вставить его в базу данных.

Массив динамически генерируется внутри файла Javascript. Теперь я хочу передать этот массив в php-файл, который будет динамически вставлять эти данные в базу данных.

Я нашел несколько примеров этого вопроса на stackoverflow, но ни один из них не подходит для моей ситуации (все они работают из файла HTML).

Массив, который я пытаюсь передать:

1.  0:
1.    cleintDate:"31/08/17"2.    cleintExpirydate:"29/11/17"3.    cleintState:"Department"4.    clientCode:"clientcode"5.    clientName:"Name"6.    messages:Array(2)
1.  0:
1.   messageClient:"Name"2.   messageDate:"2017-08-31T00:00:00"3.   messageSubject:"subject "4.   messageText:"messageText "5.   messageTime:"13:22"6.   messageType:"link"7.   __proto__:Object
2.   1:
1.   messageClient:"Name"2.   messageDate:"2017-08-31T00:00:00"3.   messageSubject:"subject "4.   messageText:"messageText "5.   messageTime:"13:22"6.   messageType:"link"7.   __proto__:Object
3.   length:2

** Примечание: ** Приведенный выше пример содержит 2 сообщения внутри массива, но есть примеры 54 сообщений внутри массива. (Текст массива слегка отредактирован, чтобы скрыть личную информацию).

Как я генерирую этот массив:

matches[0].forEach(function(match, index) {
var cleintcode = /<div\s*class="t_seg_codCliente">(.*?)<\/div>/.exec(match)[1];
var cleintname = /<div\s*class="t_seg_nomCliente">(.*?)<\/div>/.exec(match)[1];
var taxId = /<div\s*class="t_seg_nifCliente">(.*?)<\/div>/.exec(match)[1];
var date = /<div\s*class="t_seg_fechaPresCliente">(.*?)<\/div>/.exec(match)[1];
var state = /<div\s*class="t_seg_estadoCliente">(.*?)<\/div>/.exec(match)[1];
var expirydate = /<div\s*class="t_seg_fechaCadCliente">(.*?)<\/div>/.exec(match)[1];
var communications = /<div\s*class="t_seg_comCliente"><a .*;">(.*?)<\/a>/.exec(match)[1];
var comclient = /<div\s*class="t_seg_comCliente"><a href="javaScript:popupComs\('(.*?)'/.exec(match)[1];
var messages = "link" + comclient;

var html1 = httpGet(messages);

const cleanupDocString = html1.replace(/(?:<!--|-->)/gm, '');

parser = new DOMParser();

htmlDoc = parser.parseFromString(cleanupDocString, "text/html");

var communicationsvalue = htmlDoc.getElementsByClassName("valorCampoSinTamFijoPeque")[0].textContent;

if (communicationsvalue.indexOf('No existen comunicaciones asociadas a este cliente.') !== -1) {
console.log("This chat does not contain any communiction!");
} else {

var adiv = document.createElement("div"),
msgs = [],
trs;

adiv.innerHTML = cleanupDocString;
trs = adiv.querySelectorAll('tr[bgcolor="#FFFFFF"]');
trs.forEach(function(tr) {
var d = [];
tr.querySelectorAll("td")
.forEach(function(td) {
var img = td.querySelector("img"),
src = img && img.attributes.getNamedItem("src").value;
d.push(src || td.textContent);
});
msgs.push(d);
});

var mappedArray = msgs.map((msg) => {
return {
messageDate: msg[0],
messageTime: msg[1],
messageType: msg[2],
messageClient: msg[3],
messageSubject: msg[4],
messageText: msg[5]
}
});

var messageData = [{
clientCode: cleintcode,
clientName: cleintname,
taxID: taxId,
cleintDate: date,
cleintState: state,
cleintExpirydate: expirydate,
messages: mappedArray
}];

console.log(messageData);
}
});

Код, который я пытаюсь использовать для передачи массива:

$.ajax({
type: "POST",
url: "../php/messageProcessing.php",
data: {
"id": 1,
"myJSArray": JSON.stringify(messageData)
},
success: function(data) {
alert(data);
}
});

Ошибка это дает мне:

Uncaught ReferenceError: $ is not defined
at ProcessAJAXRequest (getPagesSource.js:126)
at getPagesSource.js:139
at Array.forEach (<anonymous>)
at DOMtoString (getPagesSource.js:62)
at getPagesSource.js:150

Резюме:

Как передать массив Javascript с помощью Ajax (или любого другого решения) из внешнего файла Javascript.

И как мне динамически получать каждый кусок данных из сообщений для вставки в базу данных.

Спасибо за любую помощь!

2

Решение

Кажется, проблема в том, что вы использовали JQuery без включения библиотеки JQuery на страницу. Библиотека JQuery предоставляет глобальную переменную $ и должна быть загружена в глобальный контекст перед использованием другими файлами javascript.

$.ajax({
type: "POST",
url: "../php/messageProcessing.php",
data: {
"id": 1,
"myJSArray": JSON.stringify(messageData)
},
success: function(data) {
alert(data);
}
});

Вы можете исправить это, включив jQuery где-то на странице из cdn (последняя версия):

<script
src="https://code.jquery.com/jquery-3.2.1.min.js"integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="crossorigin="anonymous"></script>

В качестве альтернативы, если вы не намеревались использовать библиотеку JavaScript, вам придется изучить, как использовать XmlHttpRequest для выполнения того, что вы ищете. Это встроено в сам язык JavaScript.

как мне динамически получать каждый фрагмент данных из сообщений для вставки
в базу данных?

Вы получите запрос POST в сценарии PHP с myJSArray в теле. Вы сможете получить к нему доступ через $ _POST [‘myJSArray’], затем вам нужно будет проанализировать его как JSON, а затем обработать как любой другой объект PHP.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector