Zend_Form Jquery 和 fileUploadErrorIniSize

2024-01-07

编辑,我通过将 JS 更改为:

$('.zend_form input:not([type="file"]), .zend_form textarea').each(function() {
    data[$(this).attr('name')] = $(this).val();
});

Hello,

正如我之前发布的,我遵循了 ZendCast,它允许您使用 jQuery 来检测并向用户显示表单问题。

但是,文件字段始终返回: fileUploadErrorIniSize(文件“image_front_url”超出定义的 ini 大小),即使文件在大小限制内。

TPL 表格:

<?php $this->headScript()->captureStart(); ?>

$(function() { 

    $('.zend_form input, .zend_form textarea').blur(function() {
        var formElementId = ($(this).parent().prev().find('label').attr('for'));
        doValidation(formElementId);
    });
});


function doValidation(id) {

    var url = '/<?php echo MODULE; ?>/json/validateform/form_name/<?php echo get_class($this->form); ?>';
    var data = {};

    $('.zend_form input, .zend_form textarea').each(function() {
        data[$(this).attr('name')] = $(this).val();
    });

    $.post(url, data, function(resp) {
        $('#'+id).parent().find('.errors').remove();
        $('#'+id).parent().append(getErrorHtml(resp[id], id));
    }, 'json');

};

function getErrorHtml(formErrors, id) {

    var o = '';
    if (formErrors != null) {
    var o = '<ul id="errors-'+id+'" class="errors">';

    for (errorKey in formErrors) {
        o += '<li>'+formErrors[errorKey]+'</li>';
    }
    o += '</ul>';
    }
    return o;
}

<?php $this->headScript()->captureEnd(); ?>


<?php 
if (is_object($this->form) && $this->form->getErrorMessages()) {
    echo $this->partial('partials/errors.phtml', array('errors' => $this->form->getErrorMessages(), 'translate' => $this->translate));
}
?>

<?php if (isset($this->errorMsg)) { ?>
    <p><?php echo $this->errorMsg; ?></p>
<?php } ?>

<?php echo $this->form; ?>

这是针对

<?php

class Administration_JsonController extends Zend_Controller_Action {


    public function validateformAction() {

        $form_name  = $this->_getParam('form_name');
        $form       = new $form_name();
        $data       = $this->_getAllParams();

        $form->isValidPartial($data);
        $json = $form->getMessages();
        $this->_helper->json($json);
    }

}

返回的json示例:

{"name":{"isEmpty":"Value is required and can't be empty"},"name_url":{"isEmpty":"Value is required and can't be empty"},"image_site_url":{"fileUploadErrorIniSize":"File 'image_site_url' exceeds the defined ini size"},"image_url":{"fileUploadErrorIniSize":"File 'image_url' exceeds the defined ini size"},"image_front_url":{"fileUploadErrorIniSize":"File 'image_front_url' exceeds the defined ini size"},"image_back_url":{"fileUploadErrorIniSize":"File 'image_back_url' exceeds the defined ini size"}}

我注意到有些人遇到了这个问题,他们说 isValidPartial 修复了它,所以我改变了

$form->isValid($data);

to

$form->isValidPartial($data);

但它并没有解决这个问题。

有任何想法吗?


问题是您不能以与常规文本字段相同的方式处理文件字段。

你打电话时$('input').val(),您将获得文本字段的实际文本值,但对于文件字段,您将获得文件名 - 而不是文件内容。

然后,您的脚本尝试将您的文件名验证为文件,但显然失败了。为了使文件验证器成功,您需要将实际文件内容传递给脚本。

因此,基本上,您需要将文件异步上传到服务器以执行所有必要的验证。

不幸的是,通过 Ajax 上传文件并不是一件简单的事情。您的基本选项是通过上传文件iFrame or swfObject。您可以查看适合此目的的各种插件here https://stackoverflow.com/questions/166221/how-can-i-upload-files-asynchronously-with-jquery.

我个人对异步文件上传的选择是文件上传器 jQuery 插件 https://github.com/valums/file-uploader.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Zend_Form Jquery 和 fileUploadErrorIniSize 的相关文章

  • 如何修改每个JSON对象javascript

    我想修改里面的每个 JSON 值cooldown object cooldown user 1 This user2 0 This 在 Javascript 中使用 for 语句 我研究了好几个小时 只找到了内部的 blocks Edit
  • IE从哪个版本开始支持Object.create(null)?

    您可以通过多种方式在 JavaScript 中创建对象 creates an object which makes the Object prototype of data var data1 new Object Object liter
  • 如何在react-bootstrap中禁用表单提交的

    在下面的代码片段中 我有许多文本类型的输入表单 如果用户点击 我似乎会得到相同的合成事件 就像他们按下提交按钮一样 我想忽略作为表单提交 只允许一个人按下 提交 按钮 我删除了一些表单组以减少示例 在所有情况下 按钮或 ENTER 键 e
  • 使用 JavaScript 禁用第三方 cookie

    我正在努力根据所有在欧盟运营的公司的数据保护规则实施新的 Cookie 政策合规性 根据该规则 用户在使用任何网站时必须能够拒绝 接受除必需的 Cookie 之外的所有内容 在我客户的网站中 我可以看到正在存储以下第三方 cookie ga
  • 可以在初始 DOM 解析期间/之前修改 DOM 吗?

    是否可以在初始 DOM 解析期间或之前修改 DOM 或者我是否必须等到 DOM 被解析和构建之后才能与其交互 更具体地说 是否有可能阻止 DOM 中的脚本元素使用用户脚本 内容脚本或 Chrome 或 Firefox 中的类似脚本运行 在解
  • 在打字稿中导入 json

    我是 typescript 的新手 在我的项目中 我们使用 typescript2 在我的要求之一中 我需要导入 json 文件 所以我创建了 d ts 文件如下 test d ts declare module json const va
  • 如何将函数附加到弹出窗口关闭事件(Twitter Bootstrap)

    我做了一些搜索 但我只能认为我可以将事件附加到导致其关闭的按钮 https stackoverflow com questions 13205103 attach event handler to button in twitter boo
  • jQuery AJAX 请求在 IE8 中失败,并显示消息“错误:调用 open 方法之前无法调用此方法。”

    我正在使用 jQuery 1 4 2 并尝试执行一个简单的 AJAX 请求 目标 URL 返回一个 JSON 字符串 我使用 jslint 对其进行了验证 该请求在 Firefox 和 Chrome 中有效 但不想在 IE8 中工作 我无法
  • 如何纠正流警告:解构(缺少注释)

    我正在编写一个小型 React Native 应用程序 并且正在尝试使用 Flow 但我无法在任何地方真正获得有关它的正确教程 我不断收到错误 destructuring Missing annotation 有关 station 这段代码
  • 在 HTML5 画布中,如何用我选择的背景遮盖图像?

    我试图用画布来实现这一点 globalCompositeOperation 但没有运气 所以我在这里问 这里有类似的问题 但我没有在其中找到我的案例 我的画布区域中有图层 从下到上的绘制顺序 画布底座填充纯白色 fff 用fillRect
  • Javascript split 不是一个函数

    嘿朋友们 我正在使用 javascript sdk 通过 jQuery facebook 多朋友选择器在用户朋友墙上发布信息 但是我收到此错误friendId split 不是函数 这是我的代码 function recommendToFr
  • 为什么我们在打字稿中使用 HTMLInputElement ?

    我们为什么使用 document getElementById ipv as HTMLInputElement value 代替 document getElementById ipv value 功能getElementById返回具有类
  • 将 UMD Javascript 模块导入浏览器

    你好 我正在对 RxJS 进行一些研究 我可以通过在浏览器中引用它来使用该库 如下所示 它使用全局对象命名空间变量 Rx 导入 我可以制作可观察的东西并做所有有趣的事情 当我将 src 更改为指向最新的 UMD 文件时 一切都会崩溃 如下所
  • Javascript 假值(null、未定义、false、空字符串:“”或 '' 和 0)和比较(==)运算符 [重复]

    这个问题在这里已经有答案了 当我使用任何一个值时 null undefined false 0 in a if陈述 它总是被评估为谬误 false 另外 这些值的否定 null undefined false 0 in a if语句总是被评
  • 在移动设备上滚动

    这个问题更多的是一个建议研究 我确实希望它对其他人有帮助 并且它不会关闭 因为我不太确定在哪里寻求有关此事的建议 在过去的 6 个月里 我一直在进行移动开发 我有机会处理各种设备上的各种情况和错误 最麻烦的是滚动问题 当涉及到在网站的多个区
  • Three.js 各种大小的粒子

    我是 Three js 的新手 正在尝试找出添加 1000 个粒子的最佳方法 每个粒子都有不同的大小和颜色 每个粒子的纹理是通过绘制画布创建的 通过使用粒子系统 所有粒子都具有相同的颜色和大小 为每个粒子创建一个粒子系统是非常低效的 有没有
  • 在 Javascript 中连接空数组

    我正在浏览一些代码 我想知道这有什么用处 grid push concat row 根据我的理解 它等同于 grid push row 为什么要大惊小怪 连接 你想使用 concat当您需要展平数组并且没有由其他数组组成的数组时 例如 va
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • 如何在执行新操作时取消先前操作的执行?

    我有一个动作创建器 它会进行昂贵的计算 并在每次用户输入内容时调度一个动作 基本上是实时更新 但是 如果用户输入多个内容 我不希望之前昂贵的计算完全运行 理想情况下 我希望能够取消执行先前的计算并只执行当前的计算 没有内置功能可以取消Pro
  • PHPUnit 和 Zend Framework assertRedirectTo() 问题

    我在创建的测试中遇到了 assertRedirectTo 问题 下面是我使用的代码 public function testLoggedInIndexAction this gt dispatch this gt assertControl

随机推荐