2009-12-09 3 views
1

"json"으로 설정된 반환 형식을 사용하여 jQuery 동기식 호출을 만들고 있는데 반환 데이터가 문자열로 반환됩니다. 내가 잘못하고있는 일이 있습니까, 아니면 문자열을 객체로 변환 할 수 있습니까? 내가 디버거에서 결과를 볼 수있는 AJAX 호출이, 노력하고 있습니다jquery가 문자열을 반환하여 jquery를 통해 동기식 아약스 호출

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; 

, 그것은 반환 된 데이터는 문자열에 단순히이다.

답변

1

응답 텍스트는 항상 문자열입니다. $ .ajax() 내에서 '성공'콜백 ​​함수를 매개 변수와 함께 추가하면 JSON 데이터가됩니다. ajaxResponse 이후

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; 
}()); 

에 정의되어있다 : $ 아약스 때문에() 실제 XMLHttpRequest 객체를 반환 할 것이다

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

.. 그 responseText 이것을 시도 등 JSON의 개념

가 없다 ajax() 호출에 정의 된 함수의 부모 클로저는 success 함수에 의해 제공되는 JSON data 객체로 설정할 수 있습니다.이 함수는 Ajax 요청이 성공적으로 완료 될 때 호출됩니다 etes). 그런 다음 이 부모 클로저에 의해 반환 된 다음 외부 data 변수에 할당됩니다.

수정 된 을 ajax()에서 즉시 반환하는 기능은 요청이 동기식이기 때문에 가능합니다. 비동기 인 경우 return ajaxResponse은 빈 문자열을 반환합니다.

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를 성공 콜백를 사용한다 :

+0

감사합니다. ... 챔피언처럼 일했습니다. 나는 async : success와 함께 success 함수를 잘못 의심했다. – user228148

0

그 방법은 평가 기능을 사용하여 작동합니다.