Получение всплывающего окна JSON для сохранения или открытия диалогового окна вместо фактического содержимого?

Моя проблема: строка json возвращается в виде файла. Когда я вызываю действие getJSONResult, оно дает мне файл со строкой json, который я могу открыть или загрузить.

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

У меня есть форма открытия с отправкой, которая использует метод действия и выполнения для получения данных. Тогда единственный способ заставить jquery работать - это применить метод действия и выполнить, который просто возвращает «успех», а затем я перехожу к своей сетке jquery с третьим действием.

struts.xml

<struts>
   <package name="live" namespace="/live" extends="struts-default,json-default">
      <action name="gridAction" class="core.action.AdminAction"> 
         <result name="success" type="json"></result> 
         <result name="error">/live/YYY.jsp</result> 
      </action>
   </package>
</struts>

person Esh    schedule 24.07.2012    source источник
comment
ваш вопрос не очень ясен для меня .. с какой проблемой вы на самом деле сталкиваетесь? вы подаете в суд на плагин struts2-json?   -  person Umesh Awasthi    schedule 24.07.2012
comment
привет Умеш, позвольте мне сначала объяснить мою ситуацию. Я использую struts2 jquery для разработки пользовательского интерфейса и Struts2 для потока. проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь войти на свою страницу, вместо отображения сетки я получаю всплывающее окно загрузки содержимого JSON. Я не знаю, где я сделал ошибку... И я использую плагин struts2-json   -  person Esh    schedule 24.07.2012
comment
Вы можете показать код и xml соответствующей части? вам нужно использовать тип результата как JSON   -  person Umesh Awasthi    schedule 24.07.2012
comment
Ниже приведена моя конфигурация в struts.xml ‹constant name=struts.devMode value=true /› ‹constant name=struts.mapper.class value=com.singpost.ctf.core.action.CustomActionMapper /› ‹package name=live namespace=/live extends=struts-default,json-default›‹имя действия=gridAction class=com.singpost.ctf.core.action.UserAdminGridAction› ‹имя результата=успешный тип=json›‹/результат› ‹имя результата= ошибка›/live/useradminerror.jsp‹/результат› ‹/действие›   -  person Esh    schedule 24.07.2012
comment
лучше обновить сообщение с кодом из вашего действия и XML-файла, чтобы увидеть его полностью, а также почему вы делаете это <result name="success" type="json">, поскольку данные будут отправлены как JSON, поэтому <result type="json"> также будет работать   -  person Umesh Awasthi    schedule 24.07.2012
comment
извините, Умеш, я не могу опубликовать код в классе действий из-за соображений безопасности в моей организации. Можете ли вы предложить некоторые другие шаги, чтобы избежать этой ошибки....   -  person Esh    schedule 24.07.2012
comment
можете ли вы объяснить это немного подробнее, сначала вы показываете страницу с экраном филейной части, и когда вы нажимаете кнопку входа в систему, вы отправляете запрос на сервер с помощью Jquery и получаете ответ от сервера в виде JSON, но он открывает всплывающее окно ?   -  person Umesh Awasthi    schedule 24.07.2012
comment
трудно вам помочь, если вы не можете опубликовать свой код.   -  person Uchenna Nwanyanwu    schedule 24.07.2012
comment
Хорошо, какую часть моего кода вы хотите, поскольку мой класс действий содержит более 700 строк кода   -  person Esh    schedule 24.07.2012
comment
@UmeshAwasthi, то, что вы просите, идеально, я получаю всплывающее диалоговое окно загрузки, как два изображения ниже .... google.co.in/   -  person Esh    schedule 24.07.2012
comment
@UmeshAwasthi и подобные google.co.in/   -  person Esh    schedule 24.07.2012
comment
привет @UmeshAwasthi, пожалуйста, подскажи, что делать дальше, я пытаюсь искать в Google, но бесполезно, я не могу найти причину появления диалогового окна загрузки.   -  person Esh    schedule 03.08.2012
comment
sorry Umesh , ik cant post the code in the action class , due to security reason in my Org возможно, вы можете написать что-то самостоятельно, чтобы опубликовать. Это должно быть более полезным   -  person Kowser    schedule 08.08.2012
comment
Можете ли вы использовать что-то вроде Fiddler для проверки заголовков ответов? В частности, найдите заголовок ответа Content-Disposition и посмотрите, имеет ли он значение вложения с именем файла или без него.   -  person Rajesh J Advani    schedule 09.08.2012


Ответы (2)


Я предполагаю, что вы используете Internet Explorer, потому что я никогда не сталкивался с этой проблемой с Google Chrome (и даже есть плагин, который все это красиво и красиво форматирует: https://chrome.google.com)./webstore/detail/chklaanhfefbnpoihckbnefhakgolnmc)

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

Просмотр JSON в Internet Explorer

Как можно Я убеждаю IE просто отображать application/json, а не предлагать его загрузить?

Основная суть решения заключается здесь:

Нужно просмотреть ответы JSON в IE?

  1. Откройте Блокнот и вставьте следующее:

    Windows Registry Editor Version 5.00;
    ; Tell IE 7,8,9 to open JSON documents in the browser on Windows XP and later.
    ; 25336920-03F9-11cf-8FD0-00AA00686F13 is the CLSID for the "Browse in place" .
    ;
    [HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/json]
    "CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
    "Encoding"=hex:08,00,00,00
    [HKEY_CLASSES_ROOT\MIME\Database\Content Type\text/json]
    "CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
    "Encoding"=hex:08,00,00,00
    
  2. Сохраните документ как IE-Json.reg и запустите его. Примечание. Это было протестировано в Windows XP и Windows 7 с использованием IE 7, 8, 9.
person Derek    schedule 08.08.2012

Нет проблем (проблема с struts2), это потому, что вы используете chrome и вызываете действие, которое возвращает результат json без использования ajax. Некоторые браузеры предлагают вам только диалог загрузки. Лично мне очень нравится, что Chrome показывает строку json в окне браузера без суеты... это отлично подходит для отладки.

Обновление: я не посмотрел на первый снимок экрана IE, где вы видите диалог загрузки.

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

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

person Quaternion    schedule 06.08.2012