阿贾克斯调用不工作在谷歌应用程序引擎
问题描述:
我想在谷歌应用程序引擎中设置一个应用程序来做一个类似的事情,在这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”打印在页面之间但没有别的和上传显然不工作)任何人都可以告诉我我做错了什么?
答
示例代码(链接视频中的11:35或同一页上的PDF中)不包含任何对document.write
的调用,而您有几个。这几乎可以肯定是你的问题,因为如果在页面加载之后调用当前页面,则该方法会替换当前页面,这是回调中的情况。 (请参阅this question的一些解释。)
关于XHR的奇怪用法:我没有正确观看视频,知道他们为什么这样做(或者即使他们提到了它),但它肯定是一个非常奇怪的方式来编写一个Ajax回调。
+0
我已经删除了所有对document.write的调用,但它仍然不起作用。如果它是发出呼叫的脚本,它应该与网页上的内容有关吗? – 2014-10-07 13:05:36
成功回调在哪里? – artm 2014-10-07 11:05:53
它与_ $。ajax_在同一行,必须向右滚动,对不起 – 2014-10-07 11:35:31
您正在实例化* jQuery .ajax成功回调中的新XMLHttpRequest *吗?为什么要这么做?为什么不在那里使用.ajax()呢?甚至更好的是,您可以使用promises API在成功完成第一个Ajax调用时运行第二个Ajax调用。 – 2014-10-07 11:39:07