2013-05-29 21 views
0

responseText返回undefined,但是當我將它作爲對象記錄時,它將返回ajax文本。我想可能有一些做沒有準備好readyState的其分配文本變量Jquery Ajax responseText返回未定義,但是當我將它作爲對象記錄時,它返回ajax文本

之前,當我這樣做:

function loadTrack(){ 
    var min = -10; 
    var max = 10; 
    var randomNumber = Math.floor(Math.random() * (max - min + 1)) + min; 
    var track = $.get("generate_song.php?track_number="+randomNumber); 
     if(randomNumber > 0 && randomNumber !== previousNumber){ 
      previousNumber = randomNumber; 
     }else{ 
      randomNumber = 1; 
     } 

     console.log(track); 
} 

我得到這個:

Object {readyState: 1, getResponseHeader: function, getAllResponseHeaders: function, setRequestHeader: function, overrideMimeType: function…} 
abort: function (e){var t=e||w;return u&&u.abort(t),k(0,t),this} 
always: function(){return i.done(arguments).fail(arguments),this} 
complete: function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this} 
done: function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this} 
error: function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this} 
fail: function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this} 
getAllResponseHeaders: function(){return 2===b?a:null} 
getResponseHeader: function (e){var t;if(2===b){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t} 
overrideMimeType: function (e){return b||(p.mimeType=e),this} 
pipe: function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()} 
progress: function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this} 
promise: function (e){return null!=e?x.extend(e,r):r} 
readyState: 4 
responseText: "Audio_Files/09%20Dream%20of%20Witches%20Dinner%2C%20V%20mov.%20f.m4a.mp3<br/>" 
setRequestHeader: function (e,t){var n=e.toLowerCase();return b||(e=v[n]=v[n]||e,y[e]=t),this} 
arguments: null 
caller: null 
length: 2 
name: "" 
prototype: Object 
__proto__: function Empty() {} 
<function scope> 
state: function(){return n} 
status: 200 
statusCode: function (e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else C.always(e[C.status]);return this} 
statusText: "OK" 
success: function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this} 
then: function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()} 
__proto__: Object 

但當我這樣做:

function loadTrack(){ 
    var min = -10; 
    var max = 10; 
    var randomNumber = Math.floor(Math.random() * (max - min + 1)) + min; 
    var track = $.get("generate_song.php?track_number="+randomNumber); 
     if(randomNumber > 0 && randomNumber !== previousNumber){ 
      previousNumber = randomNumber; 
     }else{ 
      randomNumber = 1; 
     } 

     console.log(track.responseText); 
//or if i just do it when assigning track 
} 

我得到這個:

undefined script.js:41 
XHR finished loading: "http://localhost/generate_song.php?track_number=10". jquery.js:6 
+1

AJAX是異步的。 –

+0

對不起,我不明白 – user2426607

+0

[如何從AJAX調用返回響應?](http://stackoverflow.com/questions/14220321/how-to-return-the-response-from- an-ajax-call) –

回答

-1

您正在嘗試在調用完成之前使用ajax調用的結果。調用完成後,Javascript將繼續執行所有代碼。由於您沒有任何數據,因此在調用完成之前它爲空。

你想修改你的$.get()並傳遞一個函數在調用完成時執行。

$.get("generate_song.php", {track_number: randomNumber}, function(track){ 
    console.log(track); 
}); 

您也可以在不創建url的情況下發送參數。

http://api.jquery.com/jQuery.get/

0

你是對的,這是一個計時問題。 jqXHR對象存在,但responseText不在您分配對象的時間。 但在記錄時確實顯示。如果您使用console.log(JSON.stringify(track))進行登錄,則不應該看到responseText的屬性。

所以,等待回覆使用回調readyStateChange或類似的機制。

問題出現在日誌記錄功能(我認爲是螢火蟲或鉻的檢查員?),它並沒有真正凍結對象,但顯示它的時間是,你看起來

相關問題