2010-04-20 54 views
1

我有一个表单,通过jQuery在具有多个表单的页面上进行AJAX处理。我执行以下功能,这对于$.ajax函数的包装:JSON响应为空,但URL正确回显

function do_json_get(uri){ 
    var ret = ''; 
    var url = AJAX_URL + uri; 

    $.ajax({ 
     type: 'GET', 
     url: url, 
     async: false, 
     success: function(data) { 
      ret = data.html; 
     }, 
     dataType: 'json' 
    }); 

    return ret; 
} 

当我去直接在AJAX服务器(这是渲染PHP的形式),我得到的原始JSON响应 - 所以我知道服务器正在输出到浏览器,并且AJAX服务器正在做其他事情,比如设置适当的cookie,所以我知道连接是好的(我得到了200响应代码)。然而,data对象将返回null。

+0

你的JSON是什么样的? – darcy 2010-04-20 21:58:25

+0

这只是{'html': 2010-04-20 22:01:13

+0

您的编码是否正确?即。用addslashes()等? – darcy 2010-04-20 22:04:47

回答

3

这里有一个猜测。如果您正在从文件系统提供页面,则Firefox(我认为Chrome)会将其视为源自不同的域。你会得到200响应,但没有数据。

尝试使用Safari,或者使用jsonp代替json

编辑:

既然你得到从不同的域数据,它不会工作。我认为它不被XMLHTTPRequest所允许。

+0

我没有意识到jsonp在域之外是必需的。谢谢! – 2010-04-20 22:31:21

-1

哦,男孩。这个问题再次。

AJAX异步 JavaScript和XML *。异步。异步。异步。

您的功能,do_json_get()返回ret之前成功处理函数在AJAX调用中执行。操作顺序没有从上到下进行。换句话说,你不能这样做。

由于AJAX的异步特性,AJAX对回调操作,而不是返回值。你需要改变你的范例。 成功处理程序功能需要做任何需要data.html本身,或将其传递给另一个功能。

* 是的,我知道原来缩写的XML部分主要是残留这些天

+0

如果我没有在$ .ajax调用中指定async:false来避免这种竞争条件,这将是一个很好的答案。 – 2010-04-20 22:19:00

+0

-1,因为他阻止了它。 – Leo 2010-04-20 22:20:10

+0

@b。即hollenbeck,只是因为你可以将'async'设置为'false'并不意味着你应该在这种情况下。在回调中处理JSON或使用委托方法。 – 2010-04-20 22:22:31