json parser пустой результат - PullRequest
2 голосов
/ 07 июня 2010

Я новичок в gwt и новичок в использовании Firebug. Моя версия GWT 2.0.0. используя затмение и WAMP. мой IIS остановлен для запуска apache WAMP. Я запускаю свою программу на Firefox
У меня есть действительный результат JSON из tesdb3.php, расположенный в "http://localhost/phpmyadmin/tesdb3/datauser.php"

{"item": [{"kode":"002","nama":"bambang gentolet"},
          {"kode":"012","nama":"Algiz"}]}

Я добавляю xml с

<inherits name='com.google.gwt.json.JSON'/>
<inherits name="com.google.gwt.http.HTTP" />

тогда я пытаюсь показать это в gwt с этим кодом.

public class Tesdb3 implements EntryPoint { 

String url= "http://localhost/phpmyadmin/tesdb3/datauser.php";

public void LoadData() throws RequestException{             

    RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, URL.encode(url));

    builder.sendRequest(null, new RequestCallback(){
        @Override
        public void onError(Request request, Throwable exception) {
            Window.alert("error " + exception);
        }
        public void onResponseReceived(Request request,
                Response response) {
              if (200 == response.getStatusCode()) {
                  Window.alert("ok -" + response.getText() + "-" + response.getStatusCode());
              } else {
                  Window.alert("error2 -" + response.getText()+ response.getStatusText() + "-" + response.getStatusCode());
              }         
        }
    });
}

public void onModuleLoad() {        
    try {
        LoadData();
    } catch (RequestException e) {
        e.printStackTrace();
    }       
}
}

Я запускаю его в режиме разработки. не хост-режим.
Мой код не показал никакой ошибки. Но в окне появляется предупреждение «error2 --OK-0».

result Net from firebug is 7 request:
get Tesdb3.html?gwt.codeserv = 200ok
get Tesdb3.css = 200ok
get tesdb3.nocache.js = 200ok
get hosted.html?tesdb3 = aborted
get standard.css = 304 not modified
get hosted.html?tesdb3 = 403 not modified
get datauser.php = 200ok

Мой вопрос:

Почему код состояния ответа равен 0, а текст состояния ответа - «ОК»? в коде json или Java не было ошибок.

Почему response.getText пусто? Почему я не могу получить результат json, даже один символ?

Пожалуйста, помогите мне. уже 2 месяца я пытаюсь решить эту проблему со многими типами источников, и я не могу получить ни одного результата.

Это мой datauser.php

  header('Content-type: application/json; charset=UTF-8');
  header('Cache-Control: no-cache');
  header('Pragma: no-cache');

  $link = mysql_connect("localhost", "root", "")
        or die("Could not connect : " . mysql_error());
  mysql_select_db("tesku1") or die("Could not select database" . mysql_error());

  $query = "select * from tabel1";
  $result = mysql_query($query);

  $jumlah_data = mysql_num_rows($result);

  echo '[';

  for ($i=0; $i<=count($result); $i++){
      $row = mysql_fetch_array($result);

      echo '{';
      echo "\"kode\":\"$row[kode]\",";
      echo "\"nama\":\"$row[nama]\"";

      if ($i==count($result)){
       echo '}';
      }else
      echo '},';
  }
  echo ']';

  mysql_free_result($result);

Ответы [ 3 ]

1 голос
/ 21 августа 2012

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

Причиной этой проблемы является SOP (та же политика происхождения). Эта проблема возникает из-за того, что PHP-скрипт не находится в том же домене, что и ваше веб-приложение GWT или JavaScript.

Решение довольно простое, просто добавьте новый заголовок в ваш PHP-скрипт следующим образом:

header('Access-Control-Allow-Origin: *');

это сообщит GWT, что домен (сайт), с которого запускается php-скрипт, принимает запросы от любого другого домена (сайтов).

Чтобы ограничить запрос для данного сайта, просто добавьте следующий заголовок:

header('Access-Control-Allow-Origin: http://mysite.com');

Где java-скрипт из http://mysite.com делает http-запрос.

0 голосов
/ 01 мая 2011

У меня такая же проблема. То, что мы пытаемся сделать, не должно быть проблемой СОП, поскольку обе страницы находятся на одном компьютере. Проблема заключается в выполнении, которое затмение делает, когда мы тестируем сеть. Чтобы решить эту проблему, скопируйте папку war в htdocs и запустите ее, используя свой интернет-обозреватель, и вы убедитесь, что ваш код верен. Есть возможность настроить запуск в eclipse, но я пока не знаю как.

0 голосов
/ 09 июня 2010

Что ж, похоже, проблема в SOP (Same Origin Policy) и межсайтовом запросе. Из того, что я получаю (хотя не подробно), если запрос является межсайтовым, RequestBuilder не может быть использован.
Для обмена используйте типы наложения getJson () и JSNI. Все примеры из этого урока: http://code.google.com/webtoolkit/doc/latest/tutorial/Xsite.html. Я изменяю значение цены в значение моей базы данных. В конце ... моя база данных появляется в моем браузере (да! Даааа (T-T)).

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