【发布时间】:2014-05-29 12:53:35
【问题描述】:
使用 google appengine 我正在尝试使用函数 ajaxLoad() from here 从过时的 GDownloadUrl 重现结果。但是我收到错误消息“Uncaught TypeError: undefined is not a function”,显然是关于名为 readData 的 var 或函数(我不确定它是哪个)。
function ajaxLoad(url,callback,postData,plain) {
var http_request = false;
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType && plain) {
http_request.overrideMimeType('text/plain');
}
} else if (window.ActiveXObject) { // IE
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!http_request) {
alert('Giving up :( Cannot create an XMLHTTP instance');
return false;
}
http_request.onreadystatechange = function() {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
eval(callback(http_request));
}
else {
alert('Request Failed: ' + http_request.status);
}
}
};
if (postData) { // POST
http_request.open('POST', url, true);
http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
http_request.setRequestHeader("Content-length", postData.length);
http_request.send(postData);
}
else {
http_request.open('GET', url, true);
http_request.send(null);
}
}
我使用 ajaxLoad 读取现有数据的调用如下。
ajaxLoad("details.txt?place={{place}}",readData);
readData 定义如下。
// === Define the function thats going to read the stored data ===
readData = function(doc) {
// === split the document into lines ===
lines = doc.split("\n");
for (var i=0; i<lines.length; i++) {
if (lines[i].length > 1) {
// === split each line into parts separated by Tab and use the contents ===
parts = lines[i].split(String.fromCharCode(9));
var ID = parts[0];
var lat = parseFloat(parts[2]);
var lng = parseFloat(parts[3]);
var details = parts[4];
var pincategory = parts[5];
var label = parts[6];
var point = new google.maps.LatLng(lat,lng);
var pinage = parts[7];
myArray[i] = new Array(lat,lng,details,point,ID,pincategory,label,pinage);
}
}
// create the marker
for (var j=0; j<myArray.length; j++) {
var alat = myArray[j][0];
var alng = myArray[j][1];
var adetails = myArray[j][2];
var apoint = myArray[j][3];
var ID = myArray[j][4];
var acolor = colors[myArray[j][5]];
var alabel = myArray[j][6];
var apinage = myArray[j][7];
if(!isNaN(alat+alng)){
var marker = createMarker(apoint,adetails,ID,acolor,alabel,apinage);
}
}
}
我的python数据类定义如下。
class Pin(db.Model):
date = db.DateTimeProperty(auto_now_add=True)
lat = db.FloatProperty()
lng = db.FloatProperty()
name = db.StringProperty()
cornerColor = db.StringProperty(default='ffffff')
height = db.IntegerProperty(default=32)
label = db.StringProperty(default='')
labelColor = db.StringProperty(default='000000')
labelSize = db.IntegerProperty(default=2)
primaryColor = db.StringProperty(default='ff0000')
shadowColor = db.StringProperty(default='000000')
shape = db.StringProperty(default='circle')
strokeColor = db.StringProperty(default='000000')
width = db.IntegerProperty(default=32)
category = db.IntegerProperty(default=0)
scategory = db.StringProperty()
logindex = db.IntegerProperty(default=0)
imageindex = db.IntegerProperty(default=0)
deleteRequested = db.BooleanProperty(default=False)
如果需要更多信息,请询问。
请问如何读取数据?
【问题讨论】:
-
为什么不使用 jQuery 进行 AJAX?
-
你给了我们大量的代码,却没有准确地告诉我们错误在哪一行;并且您在不使用任何内容的情况下标记并命名问题“jquery”。我对您希望我们如何帮助您感到困惑。
-
我不懂 javascript 的语言,所以我试图给出例子而不是使用我已经忽略的词汇。 @dfsq,我不知道我是否在使用 AJAX,甚至不知道如何使用;我的经验仅限于 google appengine 中的 python 和最小的 javascript。 @Blazemonger,当我调用
ajaxLoad()时出现错误。更具体地说,错误似乎出现在ajaxLoad()的http_request.onreadystatechange中。谢谢。