2010-01-19 3 views
0

아래 코드로 간단한 클릭 기능이 있지만 첫 번째 클릭에서 데이터를 가져올 수 없습니다.Drupal Ajax 데이터 검색 지연

$.ajax({ 
    type: 'POST', 
    url: 'test/get/1', 
    success: function (result) { testit = result; }, 
    dataType: 'json', 
    data: 'js=1' 
}); 
alert(testit); 

내 콜백 함수에서 나는 단순히 drupal_json ('hello'); 하지만 두 번째 시간까지는 나타나지 않습니다. 예를 들어 버튼을 클릭해도 아무 일도 일어나지 않습니다. 다시 클릭하면 '안녕하세요'라고 경고합니다. 동적 데이터가있는 경우 클릭 한 번으로 지연됩니다. 예를 들어, 첫 번째 클릭시 1을 경고하고 2 번째로 경고하는 경우 2를 반복한다고 가정 해 보겠습니다. 대신 첫 번째 클릭은 아무 것도하지 않으며 두 번째 클릭은 1을 알리고 세 번째 클릭은 두 번째 경고를 표시합니다. 감사.

답변

0

aajax은 비동기를 나타냅니다. 당신이 동 기적으로 작동하려는 경우

$.ajax({ 
    type: 'POST', 
    url: 'test/get/1', 
    success: function (result) { testit = result; alert(testit); }, 
    dataType: 'json', 
    data: 'js=1' 
}); 

(AJAX 호출이 성공적으로 완료되는 경우) success: 함수가 호출 될 때까지 따라서 testit는 아약스의 반응의 결과로 설정되지 않습니다, 당신은 또한 설정할 수 있습니다 jQuery의 .ajax 옵션에 aysnc:false,과 같이 : 두 번째 방법에서

var testit = $.ajax({ 
    type: 'POST', 
    async: false, 
    url: 'test/get/1', 
    dataType: 'json', 
    data: 'js=1' 
}).responseText; 

alert(testit); 

, 모든 자바 스크립트가 AJAX 호출이 완료 (보통 눈에 띄게 느린) 될 때까지 지연됩니다. 첫 번째 예제에서 success: 콜백 코드를 사용하는 것이 좋습니다. 그러나 무언가 실패 할 경우를 대비하여 error: 콜백을 만들 수도 있습니다. 그렇지 않으면 성공하지 못하기 때문에 콜백이 호출되지 않을 수도 있습니다.

+0

감사합니다, 뭔가 새로운 것을 배웠습니다. – Wade

0

이것은 AJAX 요청이 스크립트를 차단하지 않기 때문에 발생했을 수 있습니다. 그것은 앞서 가서 요청을하지만, 다음 라인 (경고)을 실행하기 전에 결과가 돌아 오기를 기다리지 않습니다. 따라서 처음 경고가 발생해도 데이터는 가져 오지 않았으며 두 번째에는 첫 번째 요청 (두 번째 요청이 시작되었지만 완료되지 않은 경우)의 데이터 만 포함됩니다.

솔루션은 응답이 수신 된 때까지 실행되지 않는 콜백 함수에 경고를 넣어하는 것입니다

$.ajax({ 
    type: 'POST', 
    url: 'test/get/1', 
    success: function (result) { alert(result); }, 
    dataType: 'json', 
    data: 'js=1' 
}); 
+0

다른 해결책을 가져 주셔서 감사합니다. 나는 나중에 변수를 사용할 필요가 있지만 비동기식 솔루션을 사용할 것입니다. – Wade