2012-08-11 5 views
25
function ajax_test(str1){ 
    var url = "None" 
    jq.ajax({ 
    type:'post', 
    cache: false, 
    url: 'http://....' + str1, 
    success: function(data, status, xhr){ 
     url=data; 
    }, 
    error: function (xhr, status, e) { 
    }, 
    async: true, 
    dataType: 'json' 
    }); 
    return url 
} 

글로벌 변수 url을 반환 된 성공한 아약스 데이터로 설정하려면 어떻게해야합니까?jquery ajax 호출 성공, 래퍼 자바 스크립트 함수에서 전역 변수를 변경하려면 어떻게해야합니까?

+0

일단 성공이 발생하면 'url'로 무엇인가를해야합니까? – NicoSantangelo

+0

앞에 var라는 키워드가 있기 때문에 전역 적이 지 않습니다. 나는 당신이 바깥 범위를 의미한다고 생각합니다. – maximus

+0

신속한 답장을 보내 주셔서 감사합니다! @maximus 예 외부 범위는 내가 의미했던 것입니다. 나는 유효한 URL을 가지고있다, 나는 단지 세부 부분을 꺼냈다. – sammiwei

답변

24

자바 스크립트에서는 비동기 결과 인 return에 기능을 수행 할 수 없습니다. 이 함수는 AJAX 요청이 이루어지기 전에 보통 반환됩니다.

언제든지 async: false과 동기식으로 요청할 수 있지만 일반적으로 결과를 기다리는 동안 브라우저가 잠기 게되므로 바람직하지 않습니다.

이 문제를 해결하기위한 표준 방법은 콜백 함수를 사용하는 것입니다.

ajax_test("str", function(url) { 
    //do something with url 
}); 
+0

이것은 OP가 구체적으로 요구 한 것이 아니지만 일을하는 올바른 방법입니다. +1 –

+0

첫 2 단락에는 모순이 있습니다. 비동기 결과를 반환하는 것은 불가능합니다 (두 번째 단락에서 설명한대로 엄격히 필요하지 않으면 'async : false'를 사용하지 않는 한). 그것은 충분히 잘 설명됩니다. –

+0

@ FabrícioMatté 아닙니다. 'async : false'를 사용하면 더 이상 비동기가 아니기 때문에 모순이 아닙니다. –

2

여기 PHP에서 데이터를 검색하기위한 내 예제 코드이며, 다음 아약스 성공 함수 내 자바 스크립트 전역 변수에 값을 전달합니다

function ajax_test(str1, callback){ 
    jq.ajax({ 
    //... your options 
    success: function(data, status, xhr){ 
     callback(data); 
    } 
    }); 
} 

다음은 다음과 같이 호출 할 수 있습니다. 그것은 나를 위해 일합니다!

var retVal = null; 

function ajaxCallBack(retString){ 
    retVal = retString; 
} 

function readString(filename){ 
    $.ajax({ 
     type: "POST", 
     url: "readString.php", 
     data: { 'fn': filename },  
     success: function(response){ 
      ajaxCallBack(response); 
     } 
    }); 
} 

PHP 코드 (readString.php) : 그러나

<?php 

    $fn = $_POST['fn']; 

    $file = fopen("path/".$fn.".record","r"); 
    $string = fread($file,filesize("path/".$fn.".record")); 
    fclose($file); 

    echo $string; 
?> 

, 그것은 성공 콜백이 실행되기 전에 반환 할 수 있습니다 의미하는 비동기 요청을 보내 $ 아약스(), 당신은에 의존해서는 안 순차적으로 실행되고 그 자체로 값을 반환합니다. 따라서 여기서는 콜백 함수에서 PHP 응답 값을 전역 값에 할당합니다.

관련 문제