Объединить несколько значений JSON в одну переменную - PullRequest
0 голосов
/ 07 февраля 2011

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

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

    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. Что я должен сделать, чтобы это работало?

Спасибо: |

Ответы [ 3 ]

0 голосов
/ 07 февраля 2011

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 голосов
/ 08 февраля 2011

Извините за поздний ответ. Хорошо, вот мой фактический код.

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

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

0 голосов
/ 07 февраля 2011

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

РЕДАКТИРОВАТЬ: Удалена часть ответа, который вызвал бесконечный цикл.Извините, это был действительно мертвый ответ, о котором я должен был подумать лучше, прежде чем отправлять.Я все еще поддерживаю вышеупомянутое, хотя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...