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 请求,然后再发送另一个请求(因为这一切都在循环中发生)。

希望这会有所帮助。