2011-02-07 3 views
0

В настоящее время я работаю над своим заданием, которое хотело, чтобы я получил значение из двух результатов JSON. Вот где я застрял:Объединить несколько значений JSON как одну переменную

1) У меня 2 JSON URL, которые возвращают разные значения:

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

2) Тогда, мне нужно, чтобы объединить оба результата и сделать некоторые математику в JQuery:

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

Я могу разобрать оба результата JSON, но он не смог объединиться в функции MATH. Что я должен сделать, чтобы заставить его работать?

Сказал (а) спасибо: |

+0

Можем ли мы взглянуть на формат url1.js и url2.js? – BiAiB

+0

Кроме того, ваша функция MATH просто собирается найти частное? –

ответ

0

Возможно, проблема заключается в том, что вы используете два вызова getJSON, которые являются асинхронными вызовами. Это означает, что в то время как getJson запускает вызывающую функцию, заканчивает то, что ей нужно, и программе не нужно ждать, пока результаты getJSON будут запущены. Поэтому, когда вы запускаете свою функцию MATH, нет никакой гарантии, что оба вызова getJSON завершено. Не зная, как вызываются ваши функции AA и 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

Javascript - это не многопоточный язык, поэтому этот цикл будет работать один раз или бесконечно. – 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), я не знаю, функция isNumber в jQuery – BiAiB

+0

Вы можете выполнить регулярный тест выражения, чтобы узнать, что число похоже на: /^d+$/.test (значение а); – 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; 
}); } 

Тогда моя математика, чтобы получить процент для обоих,

вар totalsearch = (valuecss + valuejqeury);

вар css_percentage = valuecss/ totalsearch * 100

вар jquery_percentage = valuejquery/ totalsearch * 100

Я считаю, что это вопрос асинхронного выпуска, но ив не получил ни малейшего представления о том, как заставить его работать , :(

Смежные вопросы