通过jquery返回字符串同步ajax调用

时间:2009-12-09 19:38:32

标签: jquery ajax json synchronous

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

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调用正在工作,因为我可以在调试器中看到结果,只是返回的数据是字符串。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

这是因为$ .ajax()将返回一个实际的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;
}());

由于ajaxResponseajax()调用中定义的函数的父闭包中定义,因此可以将其设置为{{1}提供的JSON data对象function(在Ajax请求成功完成时调用)。然后,父句点返回success,然后将其分配给外部ajaxResponse变量。

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

答案 2 :(得分: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成功回调,这样可以让你的生活更轻松。