2012-02-27 2 views
-1

Я хочу использовать Restful webservice с помощью dojo. результат WebService возвращается в браузере, но когда я попытался получить результат с помощью XHR я получаю всегда нулевое значение, поэтому, пожалуйста, помогите я новичок в додзё ...потреблять webservice с помощью dojo

dojo.query("li").onclick(function(){ 
     var xhrArgs = { 
       url: "http://192.168.1.65:9080/RAD8JAX-RSWeb/jaxrs/customers", 

       handleAs: "json", 
       headers: { "Content-Type": "application/json"}, 
       load: function(data) { 
       alert("ok"); 
        console.log(data); 
       }, 
       error: function(error) { 
        console.log(error); 
       } 
      }; 
      dojo.xhrGet(xhrArgs); 
console.log("message sent ..."); 
}); 

когда событие появляется предупреждение, и я получил «null»

+0

Вы делаете запрос от HTML страницы на на http://192.168.1.65:9080? – abraham

ответ

2

Dojo использует «магазины» для извлечения данных с серверов. Эти магазины выходят и получают данные лениво, поэтому только когда вы сначала запросите их. Каждый раз, когда ваш код JavaScript нуждается в данных, он может запросить магазин, и если он уже его вытащил, он вернет его, и в противном случае он выйдет и выберет его.

Из-за асинхронного характера магазинов вам необходимо выполнять асинхронный вызов каждый раз, когда вам нужны данные.

В вашем случае вы могли бы сделать что-то вроде:

// Create the store for later use 
var store = new dojo.data.ItemFileReadStore({ 
    contentType: 'application/json' 
    ,clearOnClose: true 
    ,urlPreventCache: true 
    ,url: "http://192.168.1.65:9080/RAD8JAX-RSWeb/jaxrs/customers" 
}); 

И каждый раз, когда вам нужно получить данные из магазина вы делаете:

store.fetch({ 
    onItem: function(item, request) { 
    alert('I fire after each returned json item') 
    } 
    ,onComplete: function(items, findResult) { 
    alert('I fire when the data has loaded completely.'); 
    } 
    ,onError: function(error, request) { 
    alert('I fire when an error occurs'); 
    } 
}); 

Только первый раз будет запрос, отправленный на сервер. Все остальные запросы будут отправлены из кеша магазинов. Если вы хотите очистить кеш, вам нужно «закрыть» хранилище. В следующий раз выборка будет называться на магазин приведет новый запрос к server.You может закрыть его так:

store.close(); 

магазины предназначены для обслуживания данных сервера в технике данных Transparant способом. Поэтому неважно, что вы обслуживаете json, xml или csv: все это будет загружено в магазин и будет вам предоставлено одинаково. Вам просто нужно знать две вещи:

  1. должен быть подан в определенном формате данные: См http://livedocs.dojotoolkit.org/dojo/data/ItemFileReadStore#item-structure-examples для формата
  2. Все элементы, которые вы получаете в методах onItem и OnComplete могут быть использованы только через dojo Read API, который вы можете прочитать здесь: http://dojotoolkit.org/api/1.7/dojo/data/api/Read

Существует много типов магазинов, ItemFileReadStore - это просто пример.

Надеется, что это помогает

+0

Большое вам спасибо, мне очень понравилась ваша помощь. Попробуйте это . Я хочу показать вам json, который будет сгенерирован, когда я вызову webservice [{«lastName»: «Ziosi», «title»: «Mr», firstName ":" Lara "," ssn ":" 888-88-8888"}] Как я могу справиться с этим, это jsonArray:/ –

+0

массив не указан. Это проблема, чтобы использовать его так? –

+1

Если вы читаете http://livedocs.dojotoolkit.org/dojo/data/ItemFileReadStore#item-structure-examples, вы увидите, что магазины нуждаются в другой структуре json. Вам необходимо обернуть массив в такой структуре: { "Идентификатор": "id", "items: [{id: 1. ... другая информация об этом товаре ...}, {Id: 2, ... другая информация об этом товаре ...}, etc ] } – koenpeters

3

На самом деле dojo.data API, немного более ограничительным, чем новый dojo.store APIs (доступно начиная с 1.6).

Для того, чтобы использовать спокойный webservice, я советую использовать магазин dojo.store.JsonRest. Нет необходимости в конкретном формате Json.

Вот хороший пример использования JsonRest: http://dojotoolkit.org/documentation/tutorials/1.7/store_driven_tree/

+0

Да, узнайте что-то новое каждый день ... Не удалось узнайте о магазине JsonRest. –

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