2009-12-09 89 views
1

我正在对ajax进行jQuery同步调用 - 返回类型设置为“json” - 但返回数据以字符串形式返回。有什么我做错了,或者有没有将字符串转换为对象?通过jquery返回字符串的同步ajax调用返回字符串

var ajax_response = $.ajax({url:"ajx_services", async:false, type:"post", data:{method: "getItem", item_no: $(ctx).val()}, dataType:"json"}); 
var data = ajax_response.responseText; 

AJAX调用工作,因为我可以看到在调试的结果,它只是返回的数据是一个字符串。

回答

1

responseText将始终是一个字符串。在$ .ajax()中添加一个带有参数的'success'回调函数,这将是JSON数据。

$.ajax({ 
    -- other stuff -- 
    , success: function(data) 
    { 
     // do something with data 
    } 
}); 
1

那是因为$。阿贾克斯()将返回一个实际的XMLHttpRequest ..其responseText没有JSON等概念

试试这个:

var data = (function() { 
    var ajaxResponse = ''; 
    $.ajax({url:"ajx_services", async:false, type:"post", data:{method: "getItem", item_no: $(ctx).val()}, success: function (data) { 
     ajaxResponse = data; 
    }, dataType:"json"}); 
    return ajaxResponse; 
}()); 

由于的定义在ajax()调用中定义的函数的父关闭时,它可以设置为由success函数提供的JSON data对象(在Ajax请求成功完成时调用该对象) ETES)。然后,由父闭包返回,然后将其分配给外部变量data

请注意,从ajax()立即返回修改后的的功能是唯一可能的,因为该请求是同步的。如果它是异步的,return ajaxResponse很可能会返回一个空字符串。

+0

谢谢! ......像冠军一样工作;我错误地怀疑async:false的成功功能。 – user228148 2009-12-10 21:56:56

0

这样应该工作,使用eval函数:

var ajax_response = $.ajax({url:"ajx_services", async:false, type:"post", data:{method: "getItem", item_no: $(ctx).val()}, dataType:"json"}); 
ajax_response.onreadystatechange = xHandler; 

function xHandler() { 
    if (ajax_response.readyState == 4) { 
    var data = eval('(' + ajax_response.responseText + ')'); 
    } 
} 

但因为已经讲过,你应该使用jQuery的成功回调,它的存在是为了让您的生活更轻松。