2011-02-07 9 views
0

현재 두 개의 JSON 결과에서 가치를 얻고 싶었던 과제를 수행하고 있습니다. 저는 여기에 붙어된다 :여러 JSON 값을 하나의 변수로 결합

1) 나는 모두 다른 값을 반환 2 개 JSON URL이 :

을 : 그럼, 두 결과를 결합 및 jQuery를 몇 가지 수학을 할 필요가

function AA(){ 
     $.getJSON("url1.js", function(VALUEA){ 
     VALUEA.json; 
     }); 
    } 
    function BB(){ 
     $.getJSON("url2.js", function (VALUEB){ 
     VALUEB.json; 
     }); 
    } 

2)

function MATH() { 
RESULT = VALUEB.json/VALUEA.json; 
alert(RESULT); } 

JSON 결과를 모두 구문 분석 할 수 있지만 결합 기능에 실패했습니다. 작동 시키려면 어떻게해야합니까?

감사 : |

+0

우리는 url1.js와 url2.js 형식을 살펴볼 수 있습니까? – BiAiB

+0

또한 MATH 함수는 몫을 찾으려고합니까? –

답변

0

아마도 비동기 호출 인 두 개의 getJSON 호출을 사용하고있는 것이 문제 일 수 있습니다. 이것은 getJson이 호출 함수를 실행하는 동안 수행해야하는 작업을 완료하고 프로그램이 getJSON의 결과를 기다릴 필요가 없음을 의미합니다. 따라서 MATH 함수를 실행할 때 getJSON 호출 완료되었습니다. 귀하의 금주 모임과 BB 기능이 어떻게 호출되는지 알지 못하면 두 가지를 중첩 할 수 있다면 JSON 호출과 MATH 함수 호출을 통해 적절한 대답을 얻으십시오.

function AA(){ 
    $.getJSON("url1.js", function(VALUEA){ 
     BB(); 
    }); 
} 
function BB(){ 
    $.getJSON("url2.js", function (VALUEB){ 
    MATH(); 
    }); 
} 
function MATH() { 
    RESULT = int(VALUEB.json.yourVar)/int(VALUEA.json.yourVar); 
    alert(RESULT); } 

EDIT : 무한 루프를 일으킨 부분을 삭제했습니다. 미안 해요 정말 두뇌 죽은 대답은 내가 게시하기 전에 더 잘 생각 했어야했다. 나는 아직도 위에 서있다.

+0

자바 스크립트는 다중 스레드 언어가 아니므로이 루프는 한 번 실행됩니다. 또는 무한히. – BiAiB

+0

그 점을 지적 해 주신 BiAiB에게 감사드립니다. JS가 멀티 스레드 일지라도 내 대답의 두 번째 부분은 원하는 결과를 얻지 못했을 것입니다. 내가 그것을 타이핑했을 때 내 머리를 통과하는 것이 무엇인지 정말로 알지 못한다. – scrappedcola

+0

솔루션은 작동하지만 시스템이 연속 통화를 대기하게합니다. 중요하지 않은 것처럼 보일 수도 있지만, 저를 믿으십시오. 저는 수십 개의 호출을하는 프로젝트를 진행하고 있습니다. 그리고로드하는 데 영원히 걸립니다. 병렬로 다시 작성한 버전에서는로드에 필요한 시간이 15-20 초에서 4 초로 늘어났습니다. – BiAiB

0

ajax 호출은 이름 상태가 비동기입니다. 먼저 수학을 수행하기 위해 "동기화"해야합니다. 즉, 수학을하기 전에 두 가지가 모두로드되기를 기다려야합니다.

이렇게하려면 콜백 함수에 두 개의 ajax 호출이 종료되었는지 확인하는 체커 함수를 호출하고, 그렇다면 수학을 수행하십시오.

은 그 방법은 다음과 같습니다 답변이 늦어

var valueA, valueB; 

function checkIfEverythinIsFine() { 
    if ((valueA || valueA === 0) && (valueB || valueB === 0)) 
     Math(); 
} 

function AA(){ 
    $.getJSON("url1.js", function(VALUEA){ 
     valueA = VALUEA.json; 
     checkIfEverythinIsFine() 
    }); 
} 
function BB(){ 
    $.getJSON("url2.js", function (VALUEB){ 
     valueB =VALUEB.json; 
     checkIfEverythinIsFine() 
    }); 
} 
+0

죄송합니다 (valueA || valueA === 0), jQuery의 isNumber 함수를 모르겠습니다. – BiAiB

+0

정규 표현식 테스트를 사용하여 숫자가 다음과 비슷한지 확인하십시오 : /^d+$/.test (valueA); – scrappedcola

+0

둘 다 나를 위해 작동하지 않습니다. url1.js 및 url2.js의 실제 형식 만 업로드하십시오. – mohdhazwan

0

죄송합니다. 자, 여기 실제 코드가 있습니다.

function totalcss(){ 
$.getJSON("http://otter.topsy.com/searchcount.js?q=css&callback=?", function (valuecss){ 
var css = valuecss.response.a; 
}); } 

두 번째 값은

function totaljquery(){ 
$.getJSON("http://otter.topsy.com/searchcount.js?q=jquery&callback=?", function (valuejquery){ 
var css = valuejquery.response.a; 
}); } 

그럼 내 수학은 모두 비율을 얻을 수 있습니다,

var에 totalsearch = (valuecss + valuejqeury)이다;

var에 css_percentage = valuecss/ totalsearch * 100

var에 jquery_percentage = valuejquery/ totalsearch * 내가 믿는 100

비동기 문제의 문제이지만, 필자는 어떻게 작동하게하는 아무 생각 없어 . :

관련 문제