可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
Here I have pasted my code, I want to return the response of $.ajax as response of function a(). But before the result comes up of ajax call, it is returning the empty f. please help on this
a = function() { var f = ''; $.ajax({ url: 'http://api.twitter.com/1/statuses/user_timeline.json?screen_name=immaulikvora&count=1&page=1&include_entities=1&callback=?', dataType: 'json', async: false, success: function(data) { f = data; } }); return f; }; var lid = a(); alert(lid);
回答1:
I guess you are using jQuery 1.8+
http://api.jquery.com/jQuery.ajax/
Please read the fine print.
As of jQuery 1.8, the use of async: false with jqXHR ($.Deferred) is deprecated;
you must use the complete/success/error callbacks.
try
http://jsfiddle.net/UgrLE/
回答2:
Please assign the ajax to jqXHR object and reading the responseText will help you.
var jqXHR=$.ajax({ url: 'http://api.twitter.com/1/statuses/user_timeline.json?screen_name=immaulikvora&count=1&page=1&include_entities=1&callback=?', dataType: 'json', async: false }); jqXHR.responseText // This will give you the result
回答3:
Unless you work for twitter, I would assume it is failing because "Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation."
Deprecated != removed and even if it did I take the deprecation is in the context of the returned jqXHR which are not being used here.
http://api.jquery.com/jQuery.ajax/
It looks like @Murali provides a work-around, but the above is important to point out for those having issue with same-domain requests.