如何将AJAX POST转换为HTTP POST,以便在点击时发布?

时间:2015-03-19 16:11:10

标签: javascript ajax http post

我有以下工作代码 - 这是一个AJAX,因此它没有点击就发布了。我了解到HTTP POST需要点击一下 - 如何在启用鼠标点击的情况下将其转换为HTTP POST?

代码的第二部分实际上只需点击一下 - 但它下载到本地计算机而不是发送到服务器 - 也许从中获取了一些想法,例如var link = document.getElementById("保存&#34)?请参阅http://webaudiodemos.appspot.com/AudioRecorder/index.html上的原始应用。

更新: 我是新手,我从这个博客得到了这些想法:http://www.mousewhisperer.co.uk/ajax_page.html

  

Ajax(异步Javascript和XML)是一种用于在后台提交服务器请求的技术(或更准确地说,是技术的组合)'并将信息从服务器返回给用户,而无需等待页面加载。 Ajax实际上是几种技术的结合,它们共同提供这种功能。它是如何工作的?   而不是通过例如正常的HTTP POST或GET请求(例如通过提交表单或单击超链接)来向服务器发出用户请求,而Ajax脚本通过使用Javascript来请求服务器XMLHTTPRequest对象。

     Recorder.setupDownload = function(blob, filename){

      var xhr = new XMLHttpRequest();
      xhr.open('POST', './upload.php', true);
      xhr.onload = function(e) {};
      // Listen to the upload progress.
      var progressBar = document.querySelector('progress');
      xhr.upload.onprogress = function(e) {
        if (e.lengthComputable) {
          progressBar.value = (e.loaded / e.total) * 100;
          progressBar.textContent = progressBar.value; // Fallback for unsupported browsers.
        }
      };

      xhr.send(blob);
    }
     ================html code fragment=======
    #save, #save img { height: 10vh; }
    #save { opacity: 0.25;}
    #save[download] { opacity: 1;}


    ==========works with a click ----------------
        var url = (window.URL || window.webkitURL).createObjectURL(blob);
        var link = document.getElementById("save");
        link.href = url;
        link.download = filename || 'output.wav';

2 个答案:

答案 0 :(得分:0)

Recorder.setupDownload是一个功能,因此您可以绑定到用户界面中的事件。换句话说,当页面上发生某些特定事情时,您可以指示JavaScript执行该函数。

使用“点击工作”示例,您可以将Recorder.setupDownload功能绑定到点击事件:

var link = document.getElementById("save");
link.onclick = Recorder.setupDownload(myblob, myfilename);

myblobmyfilename替换为脚本中的相应变量。

JSFiddle Example

答案 1 :(得分:0)

实际上以下内容将基于@bloodyKnuckles回复(我还在等待照亮硬盘图片 - 欢迎提供支持):

    var link = document.getElementById("save");
    link.onclick = function () {
        Recorder.setupDownload(myblob, myfilename);
    };