这是可怕的设计。你应该尽量让你的 JS 尽可能不引人注目,即。不要使用像
onclick
这样的事件处理程序属性。通过 JS 附加事件处理程序。有时这是不切实际的,但我没有看到任何证据表明这种情况。
我在 PHP 方面要做的是添加一些类和一个数据属性,我可以从 JS 中挂钩:
<?php foreach ($tables as $table):?>
<td>
<a data-portal-id="<?php echo $table['id']?>" class="btn-success btn-sm btn-upload"><i class="icon-plus white bigger-125"></i>Add / Change</a>
</td>
<?php endforeach;?>
现在在 JS 端,我只需从单击的链接中读取
data-portal-id
,用它来设置文件上传器上的 URL,然后触发单击以开始上传工作流程:
$(selectorForTheTable).on('click', 'a[data-portal-id].btn-upload', function (e) {
// pull the portalId from the link's data-portal-id attribute
var portalId = $(this).data('portalId'),
$uploader = $('#fileupload');
// set the url for the upload based on out portalId
$uploader.fileupload('option', 'url', '/precos/upload/id/'+ portalId);
// invoke the click
$('#fileupload').trigger('click');
});
这里缺少的一件事是,您可能需要进行一些设置,以便当上传器关闭或所有上传完成时,URL 将设置回 null 或无结果的 URL。这将有助于确保客户端出现问题时不会错误地将文件上传到错误的端点。
您需要将您的网址设置为全局,并稍后在该上下文中更新它。像这样使用
var idPortal;
var url;
function setPortalId(valor) {
idPortal = valor;
url = '/precos/upload/id/'+ idPortal;
}
分离 PHP(服务器端业务逻辑)和 Javascript(非业务关键 GUI 增强)的最简单方法是将 PHP 中的所有变量放入 DOM,然后使用它:
<script>
var phpValues = <?php echo json_encode($yourPhpValuesArrayOrObject); ?>;
</script>
....
<script>
与 HTML 内部的业务数据相关的属性(=语义结构)应与前面提到的
data-*
属性一起使用。
您在页面首次加载时设置
url
,而不是在用户单击链接后设置。将其添加到 setPortalId
函数中:
function setPortalId(valor) {
idPortal = valor;
url = '/precos/upload/id/'+ idPortal;
}
谢谢大家,但是我使用了另一种方法来获取单击元素的正确值。就像所说的那样,该函数是在页面加载时自调用的,所以此时全局变量仍然为空。我使用blueimp jquery 文件上传,所以阅读我看到的文档,可以在 ajax 请求期间发送另一个值,只需在表单中添加新闻输入。这样我解决了我的问题。