JSON не загружается с помощью jQuery.ajax () - PullRequest
1 голос
/ 14 июля 2010

Я использую веб-сервис, который возвращает данные JSON.

test.com / incident.do? JSON & sysparm_action = getRecords

Загрузка этого URL в браузере побуждает меня открыть инцидент.do, который открывается в Блокноте и отображает действительные данные JSON.

Затем на веб-странице в том же домене я использую это:

$.ajax({
  beforeSend: function(xhr) {
 xhr.setRequestHeader('Authorization', authinfo);        
},
   url: "https://test.com/incident.do?JSON&sysparm_action=getRecords",
   dataType: 'json',
   type: 'GET',
   success: function(a,b,c) {
     alert(a);
   }
 });

Однако с этим кодом я не получаю никакого JSON, я получаю только этот ответ

HTTP/1.1 200 OK
Date: Tue, 13 Jul 2010 22:28:09 GMT
Server: Apache-Coyote/1.1
Allow: GET, HEAD, POST, TRACE, OPTIONS
Content-Length: 0
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/plain

Что я здесь не так делаю?

РЕДАКТИРОВАТЬ: Если это кому-нибудь поможет, у меня есть ссылка на песочницу на веб-сайте провайдера, которая предоставляет те же функции ... Имя пользователя / пароль: admin / admin

https://demo.service -now.com / incident.do? JSON & sysparm_action = getRecords

Ответы [ 2 ]

0 голосов
/ 14 июля 2010

Попробуйте удалить "type": "GET". По умолчанию запросы jQuery Ajax являются GET.

Возможно, вы попали в ограничения XSS браузера. Веб-страница также обслуживается по HTTPS? Если страница, содержащая вызов ajax, является HTTP, а конечная точка AJAX - HTTPS, это нарушит ту же политику происхождения. Больше обсуждения здесь .

Из документа jQuery:

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

Согласно Википедии , http://test.com и https://test.com имеют различное происхождение и, следовательно, нарушают одну и ту же политику происхождения. Попробуйте также сделать свою страницу HTTPS.

$.ajax({
  beforeSend: function(xhr) {
 xhr.setRequestHeader('Authorization', authinfo);        
},
   url: "https://test.com/incident.do?JSON&sysparm_action=getRecords",
   dataType: 'json',
   success: function(a,b,c) {
     alert(a);
   }
 });
0 голосов
/ 14 июля 2010

Попробуйте установить contentType

$.ajax({
  beforeSend: function(xhr) {
 xhr.setRequestHeader('Authorization', authinfo);        
},
   url: "https://test.com/incident.do?JSON&sysparm_action=getRecords",

   contentType: "application/json",

   dataType: 'json',
   type: 'GET',
   success: function(a,b,c) {
     alert(a);
   }
 });

ОБНОВЛЕНИЕ

Это правильный способ вызова.Но если вы делаете запрос на страницу из вашего домена, это не будет работать.Для этого вам понадобится прокси.Вот простой PHP-прокси:

<?php
    /* Set the headers for application/json , xml, or whatever */
    echo @file_get_contents(urldecode($_GET['url']));
?>

Тогда ваш запрос должен быть на этой странице, например:

$.ajax({
  beforeSend: function(xhr) {
 xhr.setRequestHeader('Authorization', authinfo);        
},
   url: "myproxy.php?url=" + escape("https://test.com/incident.do?JSON&sysparm_action=getRecords"),

   contentType: "application/json",

   dataType: 'json',
   type: 'GET',
   success: function(a,b,c) {
     alert(a);
   }
 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...