将XMLHttpRequest()PUT与GAE Python一起使用
Using XMLHttpRequest() PUT with GAE Python
我目前正在尝试编写一些Javascript,以与我使用XMXMLHttpRequest()部署在GAE(使用Python)上的API交互。我获得GET没有问题,但是PUT给我带来了很多麻烦。
有趣的是,我接触来自测试HTTP站点的PUT请求没有问题(https://www.hurl.it/),但是,每次尝试使用自己的Javascript代码时,我都会收到一个状态值0。下面是我的GAE和Javascript代码的片段。
(注意-我必须使用"看跌"作为要求。)
如有任何指导,我们将不胜感激!
GAE(服务器):
def put(self):
# Save variables for update
cardkey = self.request.get('key', default_value=None)
ident = self.request.get('ident', default_value=None)
brand = self.request.get('brand', default_value=None)
year = self.request.get('year', default_value=None)
player = self.request.get('player', default_value=None)
# If card key is provided then update card
if cardkey:
# Get card
card_to_update = ndb.Key(db_models.Card, int(cardkey)).get()
if ident:
card_to_update.ident = ident
if brand:
card_to_update.brand = brand
if year:
card_to_update.year = year
if player:
card_to_update.player = player
# Save changes and print update to requester
card_to_update.put()
card_dict_format = card_to_update.to_dict()
self.response.write(json.dumps(card_dict_format))
return
# If card key is not provided send error
else:
self.response.write('key not provided. must provide key for update.')
return
还有我网页上的Javascript:
<script>
window.onload = function()
{
var myRequest = new XMLHttpRequest();
var url = 'http://cs496-assignment3-mastrokn.appspot.com/updatecard';
var param = 'key=5636318331666432';
myRequest.open('put', url);
myRequest.onreadystatechange = function()
{
if ((myRequest.readyState == 4) && (myRequest.status == 200))
{
// var myArr = JSON.parse(myRequst.responseText);
// myFunction(myArr);
document.getElementById("viewCards").innerHTML = myRequest.status;
}
else
{
document.getElementById("viewCards").innerHTML = myRequest.status;
}
}
myRequest.send(param);
}
</script>
首先,您的onreadystatechange()
处理程序应该如下所示:
myRequest.onreadystatechange = function()
{
if (myRequest.readyState == 4) //Don't do anything until the readyState==4
{
if(myRequest.status == 200) //Check for status==200
{
document.getElementById("viewCards").innerHTML = myRequest.status;
}
else //All other status codes
{
document.getElementById("viewCards").innerHTML =
'readyState='
+ myRequest.readyState
+ ' status='
+ myRequest.status
+ ' status text='
+ myRequest.statusText;
}
}
}
然后,从文档:
如果您最终得到一个状态为0的XMLHttpRequest,并且statusText=null,表示不允许执行。这是不公平的。
要查看出了什么问题,请检查浏览器中的javascript console
是否存在错误,例如:
[错误]XMLHttpRequest无法加载http://cs496-assignment3-mastrokn.appspot.com/updatecard.起源http://localhost:4567访问控制允许来源不允许。(4.htm,第0行)
当我运行上面的代码并将XMLHttpRequest发送到我自己的本地服务器时,PUT请求成功,状态代码为200。
最后,我对您发布的服务器代码表示怀疑,因为我不知道有哪个框架可以从请求处理程序返回None,而是返回一些字符串或响应对象。然而,使用其他方式对url发出PUT请求会返回200状态代码。这真的是你的服务器代码吗?您使用的框架是什么?
- 从桌面读取python文件时高亮显示代码
- 转义符不能与innerHTML一起使用
- python-selenium-点击上升链接
- python到“;流“;字典处理
- 高亮显示与数组字符串一起使用时文本插件中断
- setTimeout可以与闭包内的函数一起使用吗
- 将依赖外部库的UMD模块与browserfy捆绑在一起
- Highcharts colorsByPoint与系列中的线性渐变一起使用时不起作用
- 什么's本地node.js服务器和python简单http服务器之间的区别
- 如何将js库与typescript一起使用
- 将webpack和babel与父项目目录中的文件一起使用
- Meteor如何运行服务器端python脚本
- 将 Drag&Drop 与 jsTree 和 DataTables 一起使用
- Javascript-如何让脚本与Ajax请求的数据一起运行
- 将两个ext.TabPanels滚动到一起
- 需要一些关于将JavaScript与Python/Selenium WebDriver一起使用的建议
- 我可以使用regex与Python和Selenium一起找到一个元素吗
- 将XMLHttpRequest()PUT与GAE Python一起使用
- 我可以将python或php与Framework7/cordova一起使用吗
- 可以Harvest's Chosen与Python金字塔框架一起工作