阿贾克斯调用不工作在谷歌应用程序引擎

问题描述:

我想在谷歌应用程序引擎中设置一个应用程序来做一个类似的事情,在这google io talk演示的应用程序。这是我的HTML代码,它基本上完全从talk-解除阿贾克斯调用不工作在谷歌应用程序引擎

<html> 
    <head> 
     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
     <script language="JavaScript"> 
     function startUpload(f){ 
      if(typeof jQuery != 'undefined') { document.writeln("jQuery!"); } else { document.writeln("no jQuery :("); } 
      document.write("topwrite"); 
      $.ajax({url:'http://projectid.appspot.com/getFileUploadEndpoint', cache: false, success: function (data){ 
       document.write("i can write"); 
       var fd = new FormData(); 
       for(var n in data.params){ fd.append(n, data.params[n]); } 
       fd.append('file', f); 
       var xhr = new XMLHttpRequest(); 
       xhr.upload.addEventListener('progress', function (evt){ $('#progress').text(evt.loaded+'/'+evt.total);}, false); 
       xhr.upload.addEventListener('load', function (evt){ $('#progress').text('Complete'); }, false); 
       xhr.open(data.method, data.url); 
       xhr.send(fd); 
      }, 
      error: function(errorThrown){ document.write("didn't work did it"); document.write(errorThrown); } }); 
      return true; 
     } 
     </script> 
    </head> 
    <body> 
     <form id="uploadbanner" enctype="multipart/form-data" onsubmit="return startUpload(myfile)"> 
      <input id="fileupload" name="myfile" type="file" /> 
      <input type="submit" value="submit" id="submit" /> 
     </form> 
    </body> 
</html> 

我知道/ getFileUploadEndpoint工作正常,因为我可以去那个网址,看到了终点的信息打印出来并更改,每次我刷新,但没有在成功函数或错误内部似乎运行(也就是说我看到“jQuery!topwrite”打印在页面之间但没有别的和上传显然不工作)任何人都可以告诉我我做错了什么?

+0

成功回调在哪里? – artm 2014-10-07 11:05:53

+0

它与_ $。ajax_在同一行,必须向右滚动,对不起 – 2014-10-07 11:35:31

+0

您正在实例化* jQuery .ajax成功回调中的新XMLHttpRequest *吗?为什么要这么做?为什么不在那里使用.ajax()呢?甚至更好的是,您可以使用promises API在成功完成第一个Ajax调用时运行第二个Ajax调用。 – 2014-10-07 11:39:07

示例代码(链接视频中的11:35或同一页上的PDF中)不包含任何对document.write的调用,而您有几个。这几乎可以肯定是你的问题,因为如果在页面加载之后调用当前页面,则该方法会替换当前页面,这是回调中的情况。 (请参阅this question的一些解释。)

关于XHR的奇怪用法:我没有正确观看视频,知道他们为什么这样做(或者即使他们提到了它),但它肯定是一个非常奇怪的方式来编写一个Ajax回调。

+0

我已经删除了所有对document.write的调用,但它仍然不起作用。如果它是发出呼叫的脚本,它应该与网页上的内容有关吗? – 2014-10-07 13:05:36