Я хочу передать вложенный массив 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.
И как мне динамически получать каждый кусок данных из сообщений для вставки в базу данных.
Спасибо за любую помощь!
Кажется, проблема в том, что вы использовали 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.
Других решений пока нет …