【发布时间】:2018-02-19 09:18:57
【问题描述】:
我想将动态生成的嵌套 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
总结:
如何使用 Ajax(或任何其他解决方案)从外部 Javascript 文件传递 Javascript 数组。
以及如何从消息中动态获取每条数据以插入数据库。
感谢您的任何帮助!
【问题讨论】:
-
Uncaught ReferenceError: $ is not defined表示没有加载 jQuery。确保在该脚本之前加载它。此外,您不需要对数组进行“字符串化”。只需通过 POST 发送数组并在 php 中解析请求。 -
是的,我也读过,但我可以在 javascript 文件中声明 Jquery 吗?
-
哦,这是一个 chrome 插件,也许你应该阅读stackoverflow.com/questions/21317476/…,并考虑@Frondor 所说的:另外,你不需要“字符串化”数组。只需通过 POST 发送数组并在 php 中解析请求
-
@David 我看过那个帖子,但我似乎无法让它工作。我把它放在哪里都没关系。
标签: javascript php arrays ajax