我遇到了一個我從未見過的問題。通常當我建立JS「類」我只是做了簡單的對象樣式...Ajjax中的JS對象的塊函數
var page = {
add: function(k, v) {
this[k] = v;
}
}
我最近嘗試用var頁面做=函數(){等等等等} page.prototype = {風格,但現在當我試圖通過ajax發送東西時,一切都會中斷。我放入控制檯日誌來試圖看看發生了什麼,看起來在ajax調用中,對象正在變成窗口範圍,然後函數試圖進行參數化。可怕的解釋,我很抱歉,這裏是代碼,也許會更有意義......
var bioLocation = function(obj) {
this.ID = 0,
this.name = '',
this.address = '';
if(typeof obj != 'undefined') {
return this.init(obj);
}
}
bioLocation.prototype = {
init: function(obj) {
for(var index in obj) {
this[index] = obj[index];
}
}
}
顯然,我的真實對象的精簡版,但完美的表現。所以後來在代碼中,我有一個按鈕,即使它會通過ajax發送數據來保存一些類似的東西。
$('.save').click(function() {
var postData = {};
var saveTest = new bioLocation({ID: $('.whatever').val()});
postData.locations = saveTest;
var reply;
$.ajax({
async: false,
type: "POST",
data: postData,
dataType: 'json',
success: function(msg) {
reply = msg;
}
});
});
此外,顯然是我的代碼的一個非常簡化的版本,但在目標上非常正確。 問題是我越來越奇怪的錯誤... 「無法讀取未定義的屬性undefined」這一行將直接指向bioLocations原型中init函數的第二行。
我在整個代碼中完成了大量的控制檯日誌,當我將它們放入init方法時,它會記錄兩次,一次在click函數中創建對象,一次在ajax調用中。下面是它的控制檯日誌代碼...
var bioLocation = function(obj) {
this.ID = 0,
this.name = '',
this.address = '';
if(typeof obj != 'undefined') {
return this.init(obj);
}
}
bioLocation.prototype = {
init: function(obj) {
console.log(this);
for(var index in obj) {
this[index] = obj[index];
}
}
}
所以我會得到2個控制檯日誌,當我點擊提交按鈕,第一個節目......
bioLocation {ID:5,名稱:「」,地址:「」}
然後它會記錄(仍然在相同的點擊事件),它會記錄第二次...
窗口{頂:窗口,窗口:窗口,位置:位置,外部:對象...}
然後我會得到那個錯誤「無法讀取屬性'undefined'未定義」
我不知道爲什麼它會記錄兩次,更重要的是,爲什麼第二個日誌是Window對象。這似乎是ajax調用嘗試序列化函數和獲取錯誤,但我從來沒有見過一個原型序列化時,對象被傳遞到ajax作爲參數。我可以確認它實際上是在嘗試param函數,因爲有更多的日誌記錄和頭髮拉動,我實際上能夠在網絡選項卡中看到ajax調用,並且它確實具有init:undefined作爲正在傳遞的參數之一到ajax頁面。
所以我想我的問題是,如何阻止jquery的ajax函數參數化對象的原型片時使用它作爲參數?而且,爲什麼它實際上將原型添加到了電話中?
請你必須幫助我,我在這裏放鬆我的心。我從來沒有見過這樣的事情。先謝謝你。
嘗試'console.log(this,arguments)'' –