2011-11-09 4 views
1

서버에서 클라이언트로 변환 된 메시지 만 반환하는 간단한 함수가 있습니다. 하지만 결과는 var에 결과를 전달할 때 정의되지 않은 것으로 표시됩니다. -jQuery Ajax 결과가 정의되지 않음

function MessageNoResult() { 
    $.ajax(
    { 
    type: "POST", 
    async: true, 
    url: '<%= ResolveUrl("~/WebMethods.aspx/MessageNoResult") %>', 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
     return msg.d; 
    } 
    }); 
} 

결과 내가 헤더로 볼 때> (나쁜) 정의되지 않은이

그것은 나를 제공 :

Server ASP.NET Development Server/9.0.0.0 
Date Wed, 09 Nov 2011 09:01:31 GMT 
X-AspNet-Version 2.0.50727 
Cache-Control private, max-age=0 
Content-Type application/json; charset=utf-8 
Content-Length 24 
Connection Close 

Response {"d":"No search result"} 
JSON d "No search result" 

이유는 아직 정의되지 않은 결과를 얻을 수 있습니까?

+0

콜백 함수에서 반환하려고합니다. 그 중 하나는'success' 블록의 응답으로 코드를 작성하는 것입니다. –

+0

'success : function (msg)'내에'console.dir (msg)'을 입력했을 때 콘솔이 말하는 것은 무엇입니까? –

+0

코드를 성공 블록에 배치하면 완벽하게 작동합니다. 나는 코드를 더 재사용 가능하게하려고 노력했다. – Colin

답변

3

당신은

function MessageNoResult(callback) { 
    $.ajax(
    { 
    type: "POST", 
    async: true, 
    url: '<%= ResolveUrl("~/WebMethods.aspx/MessageNoResult") %>', 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
     callback(msg); 
    } 
    }); 
} 

그리고이 호출 MessageNoResult 함수에 콜백 함수를 전달할 수있는 전역 변수를 설정하고 수익을 저장하는 데 성공 기능 retmess = msg.d 내에서 사용하거나 HTML 요소의 내용을 설정합니다 :

MessageNoResult(function(msg) { 
    alert(msg.d); 
}); 
0

ajax 호출은 비동기 호출이며 MessageNoResult 바로 다음에 경고를 실행하므로 메시지가 실제로 ajax 요청을 완료 할 때까지 값이 없습니다.

ajax 호출의 성공에 대한 경고를 실행해야합니다.

2

코드가 alert(message) 행으로 이동하면 계속 ajax 호출이 실행되므로 message 변수에는 값이 없습니다.

success 메서드 내의 함수에 응답 값을 전달해야합니다.

success: function(msg) { 
    myFunction(msg.d); 
} 

// outside ajax call 
function myFunction(ajaxValue) { 
    alert(ajaxValue) 
} 
+0

Ajax가 완전히 실행되기 전에 프로세스 흐름이 계속되는 동일한 문제가 여전히 발생하므로 변수를 구체적으로 설정하는 방법은 없습니다.'success' 메소드에 코드를 삽입하고 싶지 않으면 실수 옵션 만이 다른 함수 (예 : 수정 된)로 전달됩니다. –

+1

Rory McCrossan의 콜백 응답이 확장되었습니다. http://stackoverflow.com/questions/8062574/jquery-ajax-results-in-undefined/8062737#8062737 – andlrc

0

콜백 기능인 성공에서 복귀하려고합니다. jQuery('#status').html(msg);

+1

이렇게하면 값이 언제 'retmess'의 설정은 당신이 그것을 사용할 수있는 허드를 모른다는 것을 의미합니다. – njr101

0

귀하의 코드 :

var message = MessageNoResult(); 

은 변수를 MessageNoResult 기능의 반환 값으로 설정합니다. 이 함수에는 반환 값이 없으므로 undefined을 응답으로받습니다.

이 문제를 처리하는 방법은 success 콜백 내에서 Ajax 호출의 반환 값을 처리하는 것입니다.

비슷한 대답은 내 대답을 참조하십시오. here :