我正在对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调用正在工作,因为我可以在调试器中看到结果,只是返回的数据是字符串。
答案 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;
}());
由于ajaxResponse
在ajax()
调用中定义的函数的父闭包中定义,因此可以将其设置为{{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成功回调,这样可以让你的生活更轻松。