0

我想这真的是我最后一个题为“通过 AJAX 使用单个提交按钮提交多个 HTML 表单”的问题的延续,它让我开始使用一些非常基本的 AJAX。你真的必须阅读这个问题才能彻底理解这个问题。现在这个问题的关键是其他可变数据......

因此,我有一个使用 jQuery 运行的基本 AJAX 提交脚本,它与我上一个问题的答案重复(减去从“按钮”到“输入#publishimages”的更改),它在迭代多个表单和提交时效果很好商场:

function post_form_data(data) {
    $.ajax({
        type: 'POST',
        url: 'verify.php',
        data: data,
        success: function () {},
        error: function () {}
    });
}

$('input#publishimages').on('click', function () {
    $('form').each(function () {
        post_form_data($(this).serialize());
    });
});

正在提交的表单(每个表单等于一个图像,因此根据需要迭代多次以提交每个图像 - 查看更多是我的上一个问题)也在上一个问题中,看起来类似于

<form id="image<?php echo $i; ?>">
   <label>Name</label>
   <input name="image[<?php echo $i; ?>][Name]" />

   <label>Location</label>
   <input name="image[<?php echo $i; ?>][Location]" />

   <!-- etc, etc, for description, coordinates, camera etc -->

</form>

回想起来,遗憾的是,这有点太淡化了。这就是另一个可变数据位发挥作用的地方。我现在正在检查每个图像的 EXIF 数据以获取更多信息,如果我发现必须由用户在表单上填写的数据,则从表单中删除输入,如果没有,则显示输入以便用户填写自己出去。所以带有表单的 PHP 脚本看起来更像这样(伪代码):

<form id="image<?php echo $i; ?>">
   <label>Name</label>
   <input name="image[<?php echo $i; ?>][Name]" />

   // Examine EXIF Data

   if (I find EXIF Location Data) {

       $_POST['image'][$i]['location'] = $location;

   } else {

       <label>Location</label>
       <input name="image[<?php echo $i; ?>][Location]" />

   }

  // etc, etc, similar situation occurs with camera make + model, date taken etc.

</form>

所以你可以看到我正在做的是在我找到/没有找到信息时有选择地动态删除和添加输入到表单中。如果我找到它,请将信息提交给$_POST超全局,否则只需在表单中回显一个输入供用户填写。有什么问题?Javascript。

这是一个问题,因为...

现在,当我引用$(this)(当然是$('form')指t 存在 - 相反,我已将它们分配给$_POST超全局,并且我的 jquery 脚本无法访问它们。

所以...

我需要一种能够通过 AJAX 将与图像有关的所有内容提交到我的目的地的方法,无论它是作为表单的一部分发布还是提交。我完全不知道如何实现这一目标......有什么建议吗?

4

2 回答 2

1

您可以保留所有内容的输入。对于那些在 EXIF 中有现有数据的人,只需将其填写并使用 CSS 隐藏用户的输入。这样,您可以以更通用的方式处理表单,您的问题就消失了。

于 2013-03-11T12:20:58.367 回答
1

你是“双重提交”。在您的 AJAX 函数内拦截单击并阻止默认值:

$('input#publishimages').on('click', function (e) {
    e.preventDefault();
    $('form').each(function () {
        post_form_data($(this).serialize());
    });
});

这将阻止表单提交。无论如何,提交的表单只不过是一个 POST 或 GET 请求。

除此之外,我对您要完成的工作感到困惑。由于验证步骤,听起来数据不完整?用户提交表单,一些 EXIF 数据被抓取,新的输入与丢失的数据一起返回,但是 EXIF 数据已经溶解在一堆零和一中,对吧?如果是这种情况,您可以使用隐藏的表单字段:

if (I find EXIF Location Data) {

    $_POST['image'][$i]['location'] = $location;
    echo '<input type="hidden" value="$foo" name="$bar" />;

} else {

    <label>Location</label>
    <input name="image[<?php echo $i; ?>][Location]" />

}
于 2013-03-11T15:00:37.120 回答