JQuery 修改克隆的变量(永远)
JQuery Modify a cloned variable (for good)
我知道关于这个主题有很多问题,但是,none 在这个特殊情况下对我有用。
我正在使用 ajax 将 div 的内容作为参数发送。当我说 "the content" 时,我指的是 html 代码,它基本上是具有一些行和列的 table。此代码随后保存为 html 文件以生成 PDF 文件。
到目前为止一切正常。我的问题是,在我提交这个 html 代码之前,我需要更改 3 个图像的 src 值,但是,在尝试了太多选项之后,这些更改永远不会发生。
相关代码如下:
var exportContents = $('#theResults').find("#reportContent").clone();
//find the images which src need to be replaced
$(exportContents).find('.dynImg').each(function(i, obj) {
var saveAsName = new Date().valueOf() + ".png";
saveAsName = "../tmpFiles/" + saveAsName;
$( "input[name=elReporte]" ).val($(this).attr("src"));
$( "input[name=theFileName]" ).val(saveAsName);
var currentId = $(this).attr("id");
theImgData = $("#justForPDFs").serialize();
$.ajax({
url: '../SaveImgServlet',
type: 'GET',
data: theImgData,
success: function(data){
$(exportContents).find("#" + currentId).attr("src", saveAsName);
console.log($(exportContents).find("#" + currentId).attr("src"));
},
error: function (request, status, error) {
alert(request.responseText);
}
});
在这些行中,我更改了所需的值,console.log 显示了正确的值:
$(exportContents).find("#" + currentId).attr("src", saveAsName);
alert($(exportContents).find("#" + currentId).attr("src"));
但是,当我提交变量 "exportContents" 时(毕竟)那些更改不存在,所有这 3 个图像的 src 保持不变,即使 console.log 另有说明. "exportContents" 变量似乎保持不变。有没有其他方法可以修改这个变量(永远)?
顺便说一句,虽然这与我的问题无关,但 ajax 调用所做的是提交图像 urls/names(因为它们是动态生成的,并且不会't "exist") 到将创建实际图像并保存的 servlet。所有这一切都很好。
最后,经过这一切,变量"exportContents"被提交如下:
$( "input[name=elReporte]" ).val(exportContents.html());
theData = $("#justForPDFs").serialize();
$.ajax({
.
.//it does more stuff
.
.
任何帮助将不胜感激。
在您的 ajax 请求中尝试 async:false
:
$.ajax({
url: '../SaveImgServlet',
type: 'GET',
async: false,
data: theImgData,
success: function(data){
$(exportContents).find("#" + currentId).attr("src", saveAsName);
console.log($(exportContents).find("#" + currentId).attr("src"));
},
error: function (request, status, error) {
alert(request.responseText);
}
});
这将强制完成一个 ajax 请求,然后再发送另一个请求(因为这一切都在循环中发生)。
希望这会有所帮助。
我知道关于这个主题有很多问题,但是,none 在这个特殊情况下对我有用。
我正在使用 ajax 将 div 的内容作为参数发送。当我说 "the content" 时,我指的是 html 代码,它基本上是具有一些行和列的 table。此代码随后保存为 html 文件以生成 PDF 文件。
到目前为止一切正常。我的问题是,在我提交这个 html 代码之前,我需要更改 3 个图像的 src 值,但是,在尝试了太多选项之后,这些更改永远不会发生。
相关代码如下:
var exportContents = $('#theResults').find("#reportContent").clone();
//find the images which src need to be replaced
$(exportContents).find('.dynImg').each(function(i, obj) {
var saveAsName = new Date().valueOf() + ".png";
saveAsName = "../tmpFiles/" + saveAsName;
$( "input[name=elReporte]" ).val($(this).attr("src"));
$( "input[name=theFileName]" ).val(saveAsName);
var currentId = $(this).attr("id");
theImgData = $("#justForPDFs").serialize();
$.ajax({
url: '../SaveImgServlet',
type: 'GET',
data: theImgData,
success: function(data){
$(exportContents).find("#" + currentId).attr("src", saveAsName);
console.log($(exportContents).find("#" + currentId).attr("src"));
},
error: function (request, status, error) {
alert(request.responseText);
}
});
在这些行中,我更改了所需的值,console.log 显示了正确的值:
$(exportContents).find("#" + currentId).attr("src", saveAsName);
alert($(exportContents).find("#" + currentId).attr("src"));
但是,当我提交变量 "exportContents" 时(毕竟)那些更改不存在,所有这 3 个图像的 src 保持不变,即使 console.log 另有说明. "exportContents" 变量似乎保持不变。有没有其他方法可以修改这个变量(永远)?
顺便说一句,虽然这与我的问题无关,但 ajax 调用所做的是提交图像 urls/names(因为它们是动态生成的,并且不会't "exist") 到将创建实际图像并保存的 servlet。所有这一切都很好。
最后,经过这一切,变量"exportContents"被提交如下:
$( "input[name=elReporte]" ).val(exportContents.html());
theData = $("#justForPDFs").serialize();
$.ajax({
.
.//it does more stuff
.
.
任何帮助将不胜感激。
在您的 ajax 请求中尝试 async:false
:
$.ajax({
url: '../SaveImgServlet',
type: 'GET',
async: false,
data: theImgData,
success: function(data){
$(exportContents).find("#" + currentId).attr("src", saveAsName);
console.log($(exportContents).find("#" + currentId).attr("src"));
},
error: function (request, status, error) {
alert(request.responseText);
}
});
这将强制完成一个 ajax 请求,然后再发送另一个请求(因为这一切都在循环中发生)。
希望这会有所帮助。