2015-02-01 4 views
0

Я хочу получить результат вызова JsonRPC на PHP-сервер на каждый JavaScript для дальнейшего использования (диаграмма с Chart.js). Для этого у меня есть функция, которая должна выполнять вызов и возвращать результат. Я использую этот плагин JQuery: https://github.com/datagraph/jquery-jsonrpcРисунок диаграммы с Chart.js, заполненными данными, полученными на JsonRPC

$.jsonRPC.setup({ 
    endPoint: '/jsonserver.php' 
}); 

var res; // first place 
function getMyStuff() { 
    var res; // second place as alternative 
    $.jsonRPC.request('getResultsById', { 
     params: [1], 
     success: function(result) { 
      alert(JSON.stringify(result, null, 4)); // works well 
      res = result; 
     }, 
     error: function(result) { 
      alert("error: " + JSON.stringify(result, null, 4)); 
     } 
    }); 
    return res; 
} 

Моя проблема заключается в том, что я не знаю, как получить результат из блока успеха. Если я вызываю функцию, я всегда получаю неопределенное значение.

+0

Извините, но то, что ваш вопрос именно? Вы просто пытаетесь вернуть функцию в формате json? –

+0

Да, это то, чего я хочу. Я потратил целый день, пытаясь заставить это работать, но я думаю, что я большой noob в JavaScript ... Так что, возможно, указывать мне в правильном направлении было бы достаточно. Это, наверное, проклятие, но я не нашел ничего сопоставимого. –

+0

Вы получаете и неопределенный результат, потому что запрос является асинхронным, поэтому, когда вы возвращаете результат, запрос еще не вернулся. Вы должны использовать обещания или обратные вызовы, поэтому, когда вызывается функция успеха, обратный вызов вызывается с результатом. – satchcoder

ответ

0

Запрос обрабатывается асинхронно, поэтому вам необходимо предоставить обратный вызов, как вы уже делаете в блоках «успех» и «ошибка». Возможно, самый простой способ, это просто предоставить еще один обратный вызов можно назвать результатом, например, так:

$.jsonRPC.setup({ 
    endPoint: '/jsonserver.php' 
}); 

getMyStuff(function (result) { 
    console.log("here's the result", result); 
}); 

function getMyStuff(callback) { 
    $.jsonRPC.request('getResultsById', { 
     params: [1], 
     success: callback, 
     error: function(result) { 
      console.error("error:", result); 
     } 
    }); 
} 
+0

Спасибо, что сделал трюк. Раньше у меня было что-то подобное, но я не понял, как с этим что-то сделать. –

0

Спасибо всем за ваши подсказки.
Для всех работает с той же проблемой - мой рабочий пример кода:

$.jsonRPC.setup({ 
    endPoint: '/jsonserver.php' 
}); 

drawMyChart(function (result) { 
    var ctx = document.getElementById("canvas").getContext("2d"); 
    var lineChartData = { 
     labels: makeSuitableArrayLabel(result), 
     datasets : [ 
      { 
       fillColor : "#F06292", 
       data: makeSuitableArrayFirst(result) 
      }, 
      { 
       fillColor : "#1565C0", 
       data: makeSuitableArraySecond(result) 
      } 
     ] 
    }; 

    window.myLine = new Chart(ctx).Line(lineChartData, { 
     // options 
    }); 
}); 

function drawMyChart(callback) { 
    $.jsonRPC.request('getResultsById', { 
     params: [1], 
     success: callback, 
     error: function(result) { 
      console.error("error:", result); 
     } 
    }); 
} 

// add 
$("#add").click(function() { 
    myLine.addData([1, 2], "label"); 
});