Javascript Opera和Chrome中JQuery中奇怪的Ajax行为
我有这个功能Javascript Opera和Chrome中JQuery中奇怪的Ajax行为,javascript,jquery,ajax,google-chrome,opera,Javascript,Jquery,Ajax,Google Chrome,Opera,我有这个功能 //send JSON-RPC request var json_rpc = (function() { var id = 1; return function(url, method, params, success) { if (typeOf(params) != 'array') { params = [params]; } var request = JSON.stringify({
//send JSON-RPC request
var json_rpc = (function() {
var id = 1;
return function(url, method, params, success) {
if (typeOf(params) != 'array') {
params = [params];
}
var request = JSON.stringify({
'jsonrpc': '2.0',
'method': method,
'params': params,
'id': id++});
return $.ajax({
url: url,
data: request,
success: success,
error: function (XMLHttpRequest, textStatus, errorThrown) {
error_msg('XHR error ' + XMLHttpRequest.status + ' ' +
XMLHttpRequest.responseText);
},
beforeSend: function(xhr) {
console.log('before send');
console.log(dir(xhr));
xhr.onreadystatechange = function(){
console.log('state');
};
},
contentType: 'application/json',
dataType: 'json',
type:"POST"});
}
})();
当我用rpc创建函数时
var update_news = rpc('get_news', function(data) {
if (data) {
//update news
}
});
叫它
$(document).ready(function() {
...
update_news();
...
});
在Firefox中,一切正常,但在Opera和Chrome中,update\u news
功能没有执行,beforeSend
被触发,但是onreadystatechange
没有,但是当我添加
setTimeout(update_news, 0);
然后是正常调用,也就是当我通过在$中放入async:false
来创建同步调用时。ajax
调用或者当我放入timeout时,timeout:1
。在单击处理程序中,它也按预期运行
$('#some_id').click(function() {
update_news();
});
任何人都知道为什么会发生这种情况。您是否忘记了“request”变量的第一个函数中的
var
?我更改了它,它的行为是一样的。浏览器的错误控制台中有错误吗?另外,如果您可以链接到demoNo errors,那么会更容易帮助您,只要函数update\u news()
没有启动。
$('#some_id').click(function() {
update_news();
});