2011-05-15 3 views
1

이 문제에 대한 많은 질문을 읽었으며 답변을 찾을 수 없습니다.변수에 jquery 게시물 데이터 저장

내가 원했던 모든 것 (나는 2011 년에 가장 단순한 것으로 생각했다)은 jquery와 ajax가 포함 된 데이터베이스에서 정보를 얻고 나중에 변수를 저장하여 나중에 할 일이 생겼다. 5 시간 후에 나는 여전히 여기에있다. 이 일이 불가능한가요? 이것에 대한

전형적인 예는 다음과 같습니다

$.post("test.php", { name: "John", time: "2pm" }, 
    function(data) { 
    alert("Data Loaded: " + data); 
    }); 

$.post("test.php", { name: "John", time: "2pm" }, 
    function(data) { 
    $("somediv").html(data); 
    }); 

그래서 당신은 지금 값을 사용하고 잊어 있을지 ... 위대한 작품.

이제는 페이지 또는 경고 상자에 정보를 표시하고 싶지 않습니다. 나중에 일부 계산을 수행 할 수 있도록 변수를 저장하고 싶습니다.

변수에 데이터를 할당하면 값은 항상 손실됩니다.

이에 대한 답변의 무리를 읽은 후, 분명히 나는이 시도에는이 기능이 비동기과 다르게 작동하고 우리가 어떻게 작동하는지 이해하지 않기 때문에 데이터를 반환하는 방법 등을 예를 들어

없다 return data from jquery $.post

그러나 그것은 나를 위해 작동하지 않았다. 아니면 올바르게 이해하지 못했습니다. 설명이나 예입니까? 콜백을 입력하거나 뭔가 대체해야합니까? 나는 변수에 저장 한 경우 내가 거기 만 다시 사용할 수 중 하나가 작동하지 않았다

Jquery return post data

는, 데이터가 함수에 전달되었습니다

어떤 사람들은 다른 함수 여기처럼 호출했다 그것은 길을 잃었고 함수를 반환하는 방법이 없었습니다. 함수가 반환하는 부분을 어디서 얻을 수 있습니까?

마침내 나는 숨겨진 필드에 값을 넣은 다음 액세스 할 것입니다. 그 중 하나가 작동하지 않았다, 나는 필드에 값을 넣을 수 있지만 액세스하려고 할 때 ... 그것은 아직 없습니다.

$ .post를 사용하지 않아야합니까? $ .ajax가 차이를 낳습니까? 이것을 어떻게 할 수 있습니까? 아약스가 데이터베이스에서 가치를 얻고 나중에 자바 스크립트로 저장하는 것이 정말 어렵습니까? 모두들 지금 당장 그것을 사용하고 있습니까? 이게 실제로 달성하기가 어렵습니까?

답변

0

문제가 가변 범위 인 경우 ajax 요청의 "익명"콜백 함수 외부에서 정의 된 변수가 필요합니다. 그렇지 않으면 데이터를 단순히 "반환"할 수 없으므로 데이터가 손실됩니다.

<html> 
<head> 
    <script type="text/javascript"> 

    // global storage 
    var myData; 

    // this function will be called if there is a response from the ajax request 
    function doSomethingWith(response) { 

     // maybe perform some formatting, parsing before 

     // save to global variable 
     myData = response; 
    } 


    // some click handlers for demonstration 

    $('#start').click(function() { 
     $.post("test.php", { name: "John", time: "2pm" }, 
     function(data) { 
      // call callback 
      doSomethingWith(data); 
     }); 
    }); 

    $('#show').click(function() { 
     alert("Response was: " + myData); 
    }); 

    </script> 
</head> 
<body> 
    <a id="start" href="#">Fire AJAX Request!</a><br/> 
    <a id="show" href="#">Show Response!</a> 
</body> 
</html> 
+0

그는 이미이 방법을 시도했지만 전역 변수 대신 숨겨진 필드를 사용했습니다. 문제는 범위가 아니라 타이밍입니다. – Guffa

+0

반환 된 코드에 <,>과 같은 특수 문자가 포함되어있을 수 있으므로 숨겨진 필드에 데이터를 넣지 않아 예기치 않은 동작이 발생할 수 있습니다. 더 좋은 해결책은 jQuery [.data (key, value)]를 사용하는 것입니다. (http://api.jquery.com/data)를 사용하여 데이터를 요소에 첨부하십시오. – sled

+0

사실이지만 숨겨진 필드는 숨겨진 필드가 전역 저장소로 사용되었으므로 작동하지 않는 경우 그것도 전역 변수로 작동하지 않을 것입니다. – Guffa

0

귀하의 게시물 함수의 범위 외부의 변수를 설정 ... : 같은

코드는 볼 수 있었다같은 :로, 심지어 jQuery를 문서에

var result = $.ajax("test.php", { 
    async: false, 
    data: { name: "John", time: "2pm" }, 
}); 

그러나, 이것은 일반적으로 권장하지 않습니다 :

var returnedData = ""; 
$.post("test.php", { name: "John", time: "2pm" }, 
    function(data) { 
    returnedData = data; 
    } 
); 
0

그것은 모든 하드 달성하기 위해, 당신은 단지 대신 asynchonous의 synchonous 요청을 사용하지거야 브라우저는 결과를 기다리는 동안 응답하지 않습니다. 가능하면 비동기 방식을 사용해야합니다.

0

저는 답변을 찾기 위해 시간도 함께 찾고있었습니다. 함수 호출만으로 작동 시켰습니다. 당신이 그 변수를 필요로 하든지과 같이() 함수를 작성,하고 $ .post에서 사용 :

$.post(url, { field: value }, 
     function(data) { 
     yourFunction(data); 
     }); 

    function yourFunction(data){ 
     // check against db query 
     // call other functions 
    } 

내가 말했듯이, 나는 아직도 더 나은 솔루션을 찾고 있어요.

관련 문제