2015-07-05 2 views
0

Я относительно новичок в JSON. Я прочитал учебник и попытался его реализовать, но не повезло. В основном у меня есть внешний URL-адрес, который дает данные/канал JSON. Данные находятся в форме массива. Теперь я пытаюсь написать программу JavaScript (на моем локальном компьютере), которая выведет данные из этого URL-адреса и разместит мой html.Получить данные из массива JSON с внешнего URL

Вот эта функция. Он также включает в себя внешнюю ссылку. Но я не получаю никакого результата. Просто пусто. Мне что-то не хватает или что я делаю неправильно?

<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Index Page</title> 
</head> 

<body> 
<div id="id01"></div> 

<script> 
    var xmlhttp = new XMLHttpRequest(); 
    var url = "http://mpatrizio-001-site5.smarterasp.net/categoryList.php?D=B7ACEF70-4901-41C8-930F-D4D681D82DAA"; 

    xmlhttp.onreadystatechange = function() { 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
     var myArr = JSON.parse(xmlhttp.responseText); 
     myFunction(myArr); 
    } 
} 
xmlhttp.open("GET", url, true); 
xmlhttp.send(); 

function myFunction(arr) { 
    var out = ""; 
    var i; 
    for(i = 0; i < arr.length; i++) { 
     out += arr[i].CategoryID + '<br>'; 
    } 
    document.getElementById("id01").innerHTML = out; 
} 
</script>  
</body> 
</html> 


UPDATE:

После того, как в правильном направлении, вы, ребята (большое спасибо за это), я обнаружил, что запрос блокируется сервером из-за некоторых Ошибка CORS. Я изучаю это. Просмотрите следующее изображение ошибки, которую я получил в консоли. Из этого вы можете конкретно указать решение? enter image description here

+1

сервер не aloowed домен КИО. – user3227295

+4

Pls действительно проверяет консоль разработчика или вкладку сети перед отправкой вопросов .. – Rayon

+1

append '--disable-web-security' (по пути C; \ ... \ chrome.exe) в свойствах exe chrome, которым предшествует пробел. –

ответ

2

Append --disable-web-security (по пути C; ... \ chrome.exe) в свойствах chrome exe, которым предшествует пробел.

Более элегантное решение:

Другое решение будет на стороне сервера. Который должен создать файл crossdomain.xml и clientaccesspolicy.xml на сервере. Это структура, как:

crossdomain.xml:

<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> 
<cross-domain-policy> 
    <allow-http-request-headers-from domain="*" headers="SOAPAction,Content-Type"/> 
</cross-domain-policy> 

clientaccesspolicy.xml:

<?xml version="1.0" encoding="utf-8"?> 
<access-policy> 
    <cross-domain-access> 
    <policy> 
     <allow-from http-request-headers="SOAPAction"> 
     <domain uri="*"/> 
     </allow-from> 
     <grant-to> 
     <resource path="/" include-subpaths="true"/> 
     </grant-to> 
    </policy> 
    </cross-domain-access> 
</access-policy> 

Некоторые учебные пособия являются:

http://help.adobe.com/en_US/AS2LCR/Flash_10.0/help.html?content=00000469.html

http://www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html

Его спецификация:

http://www.adobe.com/devnet-docs/acrobatetk/tools/AppSec/CrossDomain_PolicyFile_Specification.pdf

Другие учебные пособия:

https://msdn.microsoft.com/en-us/library/cc197955(v=vs.95).aspx

2

Что вы пытаетесь сделать, это запрос на перекрестный домен. Запрос на перекрестный домен также называется запросом JSONP среди многих других и имеет два ограничения:

Во-первых, он ограничивает вас только запросами «GET», то есть вы не можете отправить запрос «POST» в кросс-домен сервер.

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

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

+0

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

2

Возможно, вы пытаетесь выполнить команду XMLHttpRequest в домене, отличном от того, на котором установлена ​​ваша страница, браузер заблокирует этот запрос. Чтобы разрешить запрос, вы должны использовать CORS.

Вы можете открыть инструменты разработчика в Chrome (F12) и проверьте наличие сообщений об ошибках, связанных с «„Access-Control-Allow-Origin:“Нет заголовка присутствует на запрошенный ресурс. Origin '[имя_домена] поэтому не допускается доступ ».

+0

Благодарим вас за руководство. Ваше предложение довольно близко к очевидной проблеме. Я обновляю свой вопрос и опубликую изображение об ошибке, которую я вижу в консоли. Это дает ошибку CORS, о ​​которой вы упомянули. Пожалуйста, помогите мне в этом. –

1

Благодарим Muhammad Imran, Barr J и Luuk Moret, наконец-то я смог решить свою проблему. Это был запрос домена кросс, поэтому он не позволял мне получать данные. Так что я сделал,

  1. Я проверил с помощью test-cors.org сервера, к которому я отправлял запрос, чтобы увидеть, если CORS настроен или нет. И сервер был настроен.
  2. Затем я установил этот плагин для хрома, «Allow-Control-Allow-Origin: *» Этот плагин позволяет запросить любой сайт с ajax из любого источника. Добавляет в ответ заголовок «Allow-Control-Allow-Origin: *» и Whola !. Это решило мою проблему.

Надеюсь, это поможет кому-то еще.

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