【问题标题】:Getting a unique number at upload上传时获取唯一编号
【发布时间】:2014-01-02 22:38:40
【问题描述】:

我有一个上传脚本,它在用户点击提交时运行,它看起来像这样:

<script type="text/javascript">
//<![CDATA[
$(function() {
    // Initialiseer uploadifive
    $('#file_upload').uploadifive({
        'auto'              : false,
        'checkScript'       : '/uploadifive/Sample/check-exists.php',
        'onFallback'        : function () {
                                  window.location = '/home.php';
                              },
        'method'            : 'post',
        'queueID'           : 'queue',
        'uploadScript'      : '/upload/uploadifive.php',
        'removeCompleted' : true,
        'onUploadComplete'  : function (file, data) {
                                  console.log(data);
                              }
    });

    // Hang een click-event aan de knop
    $('#subby').on('click', function () {
        // Werk formData van uploadifive bij met de betreffende waarden
        $('#file_upload').data('uploadifive').settings.formData = {
            'timestamp'   : '<?php echo $timestamp;?>',
            'token'       : '<?php echo md5('unique_salt' . $timestamp);?>',
            'projectnr'   : $('input[name=projectnr]').val(),
            'gebruiker'   : $('input[name=gebruiker]').val(),
            'gebruikerid' : $('input[name=userId]').val(),
            'mapId'       : $( "#mapId option:selected" ).val(), // moet dit niet val() zijn???
            'uploadbash'  : '<?php echo $uploadbash; ?>',
            'upload_reden' : $( "#upload_reden option:selected" ).val(),
            'todo'        : $("input[name=todo]:checked").val(),
            'lid'         : $('input[name="lid[]"]:checked').serialize()
        };
        // Voer de upload uit
        $('#file_upload').uploadifive('upload');
    });
});
//]]>
</script>

现在我想修改上面的内容并构建以下内容:

当脚本运行时,它必须在后台运行页面randomnumber.php,并将接收到的号码作为'uploadbash':''发送回来

这可能吗?我应该怎么做?


这行不通,我现在这样做:

<script type="text/javascript">
//<![CDATA[
$(function() {
    // Initialiseer uploadifive
    $('#file_upload').uploadifive({

        'auto'              : false,
        'onFallback'        : function () {
                                  window.location = '/home.php';
                              },
        'method'            : 'post',
        'queueID'           : 'queue',
        'uploadScript'      : '/upload/uploadifive.php',
        'removeCompleted' : true,
        'onUploadComplete'  : function (file, data) {
                                  console.log(data);
                              }
    });

    // Hang een click-event aan de knop
    $('#subby').on('click', function () {

        // Werk formData van uploadifive bij met de betreffende waarden
        $('#file_upload').data('uploadifive').settings.formData = {

              'checkScript'       : 

$.ajax({
      url: '/upload/number.php',
      type: 'POST',
      data: {search: "beeeeeeeh"}
    }).done(function () {
                alert("test");
                $("#result").html(data);   

                 }),            
            'timestamp'   : '<?php echo $timestamp;?>',
            'token'       : '<?php echo md5('unique_salt' . $timestamp);?>',
            'projectnr'   : $('input[name=projectnr]').val(),
            'gebruiker'   : $('input[name=gebruiker]').val(),
            'gebruikerid' : $('input[name=userId]').val(),
            'mapId'       : $( "#mapId option:selected" ).val(), // moet dit niet val() zijn???
            'uploadbash'  : '<?php echo $uploadbash; ?>',
        'upload_reden' : $( "#upload_reden option:selected" ).val(),
        'todo'        : $("input[name=todo]:checked").val(),
            'lid'         : $('input[name="lid[]"]:checked').serialize(),
        'number'      : $("#result").html(data)
        };
        // Voer de upload uit
        $('#file_upload').uploadifive('upload');
    });
});
//]]>
</script>

所以我添加了:

'checkScript'       : 

    $.ajax({
          url: '/upload/number.php',
          type: 'POST',
          data: {generateNumber: "yes"}
        }).done(function () {
            alert("test");
                    $("#result").html(data);   

                     }),        

还有:

'number'      : $("#result").html(data)

但是当我点击“上传”时,我在萤火虫中得到了这个:

ReferenceError: 数据未定义 $("#result").html(数据); }),

警报“测试”确实弹出。

【问题讨论】:

  • 首先对 randomnumber.php 执行 $.get 以获取您的值,然后在其 success() 回调中执行上述所有操作
  • 试过了,还是不行,看下面的帖子。

标签: javascript php random numbers


【解决方案1】:

你的问题是这个

    {'checkScript'       : 

    $.ajax({
      url: '/upload/number.php',
      type: 'POST',
      data: {search: "beeeeeeeh"}
    }).done(function () {})

不会将您期望的内容分配给 checkScript。这是一个异步调用,因此您必须等待它返回(在 done() 或 success() 中),然后才能使用它将提供的数据。

 // Hang een click-event aan de knop
    $('#subby').on('click', function () {
        // Werk formData van uploadifive bij met de betreffende waarden
        //when we click, do a call to the backend...
        $.ajax({
           url: '/upload/number.php',
           type: 'POST',
           data: {generateNumber: "yes"}
        }).success(function(numberPHPResult){ //***
        //and when it comes back, populate the form
           $('#file_upload').data('uploadifive').settings.formData = {
            'checkScript': numberPHPResult, //***
            'timestamp'   : '<?php echo $timestamp;?>',
            'token'       : '<?php echo md5('unique_salt' . $timestamp);?>',
            'projectnr'   : $('input[name=projectnr]').val(),
            'gebruiker'   : $('input[name=gebruiker]').val(),
            'gebruikerid' : $('input[name=userId]').val(),
            'mapId'       : $( "#mapId option:selected" ).val(), // moet dit niet val() zijn???
            'uploadbash'  : '<?php echo $uploadbash; ?>',
            'upload_reden' : $( "#upload_reden option:selected" ).val(),
            'todo'        : $("input[name=todo]:checked").val(),
            'lid'         : $('input[name="lid[]"]:checked').serialize()
           };
           // Voer de upload uit
           $('#file_upload').uploadifive('upload');
       })

    });

此外,如果您想提供更多信息,您应该编辑您的问题,而不是发布答案。

最后,如果您想更深入地学习 Javascript,Douglas Crockford 是您的理想选择。

http://javascript.crockford.com/ 网上的东西 http://www.amazon.co.uk/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742 //书 https://www.youtube.com/playlist?list=PL7664379246A246CB //视频

【讨论】:

    【解决方案2】:

    我认为您必须将返回的对象作为链接的done() 方法的参数传递。所以done(data)试试:

    $.ajax({
        url: '/upload/number.php',
        type: 'POST',
        data: {generateNumber: "yes"}
    }).done(function(data) 
    {
        console.log(data);
        alert("test");
        $("#result").html(data.responseText); //If I'm not wrong data is a XMLHttpRequest object    
    });
    

    甚至更好:

    $.ajax({
        url: '/upload/number.php',
        type: 'POST',
        data: {generateNumber: "yes"},
        success: function(data) 
        {
            console.log(data);
            alert("test");
            $("#result").html(data.responseText); //If I'm not wrong data is a XMLHttpRequest object    
        },
        error: function(xhr, ajaxOptions, thrownError)
        {
            alert(xhr.status);
            alert(thrownError);
        });
    

    【讨论】:

      猜你喜欢
      • 2018-08-10
      • 1970-01-01
      • 1970-01-01
      • 2013-08-30
      • 1970-01-01
      • 1970-01-01
      • 2012-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多