вызовите функцию JQuery JSON и верните полученную полезную нагрузку - PullRequest
2 голосов
/ 16 февраля 2010

Я хотел бы вызвать функцию JQuery JSON и передать результаты в виде объекта JSON (массив Javascript?), Но я не совсем понимаю динамику происходящего здесь.

myJSON = myFunction(productNo)
$.each(myJSON, function(i,user){
   alert (user.description)
}


function myFunction(productNo)
{
  $.getJSON
  (
      "processors/process_1.php",
       { productNo: 'ABC' },                
       function(data)
       {        
           return data;
       }
   )        
}

Ответы [ 2 ]

1 голос
/ 16 февраля 2010

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

myFunction(productNo, function(myJSON) {
    $.each(myJSON, function(i,user){
       alert (user.description)
    }
});


function myFunction(productNo, onComplete)
{
  $.getJSON
  (
      "processors/process_1.php",
       { productNo: 'ABC' },                
       onComplete
   )        
}
0 голосов
/ 16 февраля 2010

То, что вы получаете, является собственной структурой данных Javascript (JSON обозначает Javascript Object Notation. Я не уверен, что понимаю ваш вопрос, либо ... вы спрашиваете, что здесь происходит?

То, что вы сейчас делаете, - это перебор свойств объекта data, который вы вернули (в формате JSON). Ожидаете ли вы список user объектов какого-либо рода? Каждый из которых имеет атрибут description?

РЕДАКТИРОВАТЬ

Хорошо, поэтому после прочтения вашего комментария, я думаю, что я выяснил вашу проблему - поскольку AJAX является асинхронным, вы можете работать с данными только после завершения запроса. Вот почему вы получаете неопределенный ответ, потому что браузер продолжает выполнять код, не дожидаясь завершения запроса. Здесь вам нужно работать с данными в вашем обратном вызове:

function myFunction(productNo)
{
  $.getJSON(
      "processors/process_1.php",
       { productNo: 'ABC' },                
       function(data) {
           $.each(data, function(i, user){
                 alert (user.description)
           }
       }
   )        
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...