2013-01-11 69 views
0

任何人都可以詳細說明什麼可能會出錯嗎?我沒有真正的線索知道在這一點上要尋找什麼。javascript console.log(obj)顯示現有屬性'上下文'和console.log(obj.context)顯示undefined

示例代碼:

$.ajax({ 
    url: uploader.fileupload('option', 'url'), 
    context: uploader, 
    success: function(response){ 
     //logging uploader 
     console.log(uploader); 
     //logging this --> logs the same as logging uploader 
     console.log(this); 
     //loggin response --> clearly shows a context attribute holding the correct data for this response 
     console.log(response); 
     //logging response.context --> shows undefined 
     console.log(response.context) 

     var done = uploader.fileupload('option','done'); 
     done.call(this, null, response); 
    }, 
    dataType:"json" 
}) 

我不習慣與環境中工作的屬性在$阿賈克斯()調用,我懷疑這個功能引起了我的問題。

這段代碼在ajax調用後的一段時間導致我的代碼出現問題。我很確定這與ASYNC問題無關,因爲問題已經存在於原始ajax請求的實際成功回調中。

我禁用了已發送的php頭文件,但它保持不變。我試圖基於另一個話題,這意味着我的頭文件可能有問題。 我也禁用了$ .ajax()中的dataType attr,但是我的響應沒有被識別爲json。

如何調試的任何幫助或提示,非常感謝!

更新: 刪除ajax調用中的上下文屬性確實解決了問題。 但是,爲什麼當console.logging()

+0

你的「完成」功能是怎樣的。我認爲它應該是'done.call(this,response)',但是因爲你使用上下文,你也可以執行'this.done(response)' –

+1

'console.log(JSON.stringify(response))''給你什麼? – Matt

+0

您確定響應正在被視爲JSON並被解析爲對象嗎?也許'response'只是一個字符串。 (嘗試做'console.log(typeof response)'檢查) – hugomg

回答

3

我的響應對象(或至少似乎被追加)後,我不知道這是否是你的問題,因爲問題本身應該更好地指定。但看看標題,看起來console.log()是異步並通過引用傳遞的普通老問題。

當您撥打console.log(object)時,該對象將保留爲參考,不會立即打印。一段時間後,當記錄實際發生時,對象可能處於不同的狀態(例如,在這種情況下,它可能有一個屬性)。

與此相反,當您登錄obj.property時,調用是同步的,該屬性尚未定義。

+0

顯然我誤解你自己的答案xD。但我仍然認爲這個問題很好解釋。 由console.log是異步的,我以爲你在ajax調用完成之前指向運行代碼,因此爲什麼它是未定義的。但你的意思是控制檯。日誌是異步的。 – Bodybag

+0

那你怎麼解釋console.log(object.context)確實說它是未定義的?就像它真的是......爲什麼這不是異步執行?還是我缺少別的東西? 無論如何,如果我正確理解這一點,我的第一個結論將警示更好的調試,因爲它顯示警報()時的實際值 - 調用 – Bodybag

+0

@Bodybag執行回調時HTTP請求已經返回,對此毫無疑問。我不能*解釋*發生了什麼,因爲你的代碼片段無法運行,反正它不是你真正的代碼。我只想指出一個頗爲怪異的例子 – Raffaele

相關問題