gpt4 book ai didi

javascript - 如何使用数组和字符串参数进行 Ajax 调用

转载 作者:行者123 更新时间:2023-11-27 23:05:28 24 4
gpt4 key购买 nike

我想使用数组值和字符串参数对我的服务器进行 ajax 调用。

这是我在页面中使用的函数。

var globalArray = [];

function submit() {
var string_MyVal, jsonBody, string_MyVal1, string_MyVal2, string_MyNameVal, string_MyNameDesc, string_MyNameFlag;

string_MyVal1 = 150;
string_MyVal = "sel.html";
string_MyVal2 = "string_MyVal2";
string_MyNameVal = "string_MyNameVal";
string_MyNameDesc ="string_MyNameDesc";
string_MyNameFlag = "private";

jsonBody = 'storedSelections=' + globalArray +
'&string_MyVal='+ string_MyVal +
'&string_MyVal1='+ string_MyVal1 +
'&string_MyVal2='+ string_MyVal2 +
'&string_MyNameVal=' + string_MyNameVal +
'&string_MyNameDesc='+ string_MyNameDesc +
'&string_MyNameFlag=' + string_MyNameFlag;

$.ajax({
async : false,
type : "POST",
url : 'http://example.com:8080/myApp/DataServlet',
data : jsonBody,
success : function(data) {
setToken(data);
},
error : function(data, status, er) {
alert("error: " + data + " status: " + status + " er:" + er);
}
});
}

在我的 servlet 中,这个 globalArray 仅作为“对象对象”出现。该数组中有更多内容..

如何将此数组和字符串值传递给我的 servlet。

我知道使用 JSON.stringify 解决了这个问题,

var selections = JSON.stringify(globalSelection);
alert(selections

这有效,数据如下所示,

[{"range":{},"type":3,"rCollection":[{"range":{},"node":{},"tagName":"P","tagIndex":2,"data":"lot%20","nodeType":3,"sIdx":14,"eIdx":18,"fontColor":"yellow","bgColor":"green"}],"textContent":"lot%20","anchorNode":{},"focusNode":{},"selectionId":181862,"yPOS":0}]

但这不支持 safari 和 iOS。

任何人都可以在这里协助如何将我的数组值与同一 ajax 调用中的字符串值一起传递给 servlet。

编辑:

这是我尝试过的更新,

function textSelection(range, anchorNode, focusNode) {
this.range = range;
this.type = 3;
this.rCollection = [];
this.textContent = encodeURI(range.toString());
this.anchorNode = anchorNode;
this.focusNode = focusNode;
this.selectionId = getRandom();
this.yPOS = getYPOS();

this.getTagName = function(range) {
var el = range.startContainer.parentNode;
return el;
}
this.getTagIndex = function(el) {
var index = $(el.tagName).index(el);
return index;
}

this.simpleText = function(node, range) {
if (!node)
var entry = this.createEntry(this.anchorNode, this.range);
else
var entry = this.createEntry(node, range);
this.rCollection.push(entry);
this.highlight(this.rCollection[0].range);
this.crossIndexCalc();
textSelection._t_list.push(this);
pushto_G_FactualEntry(this);
}

this.compositeText = function() {
this.findSelectionDirection();
var flag = this.splitRanges(this.anchorNode, this.focusNode,
this.range.startOffset, this.range.endOffset);
if (flag == 0) {
for (j in this.rCollection) {
this.highlight(this.rCollection[j].range);
}
}
this.crossIndexCalc();
textSelection._t_list.push(this);
pushto_G_FactualEntry(this);
}

this.toJSON = function() {
return {range: this.range};
}

}

在 globalSelection 中,我有上面 textSelection 的元素。我按照建议添加了 toJSON。

现在我在控制台中得到的结果如下,

[{"range":{}}]

它是空值...

最佳答案

Javascript 提供了序列化方法:

toJSON()

此函数用于定义序列化的一部分。基本上,您可以创建要序列化的对象的克隆,排除循环依赖项或不应发送到服务器的数据。

有关此行为的更多信息可以在此处找到:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#toJSON()_behavior

JSON.stringify()

该函数调用 toJSON() 并序列化返回的对象。

示例:

var objectToSend = {};
objectToSend.varX = 5;
objectToSend.varY = 10;
objectToSend.toJSON = function() { return {varX: this.varX}; }
var jsonString = JSON.stringify(objectToSend);

结果将是:

"{"varX":5}"

关于javascript - 如何使用数组和字符串参数进行 Ajax 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36640582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com