XmlDocument для чтения XML из строки или из файла.
XmlDocument doc = new XmlDocument (); doc.Load ( "C: \\ temp.xml");
или
doc.LoadXml ("& lt; xml & gt; something & lt; / xml & gt;");
, затем найдите узел под ним, например:
XmlNode node = doc.DocumentElement.SelectSingleNode ("/ book / title");
или
foreach (узел XmlNode в doc.DocumentElement.ChildNodes) {строка text = node.InnerText; // или зацикливаем на его дочерние элементы}
, затем читаем текст внутри этого узла, как это
string text = node.InnerText;
или прочитать атрибут
string attr = node.Attributes ["theattributename"] ?. InnerText
Всегда проверяйте значение null на атрибутах ["something"], поскольку оно будет null, если атрибут не существует.
JavaScript-код ограничен политикой того же происхождения , что означает, что на странице в www.example.com
вы можете сделать только (AJAX ) запрашивает службы, расположенные в точно таком же домене, в этом случае точно www.example.com
(не example.com
- без www
- или whatever.example.com
).
В вашем случае ваш Ajax код пытается добраться до службы в http://wordicious.com
со страницы, расположенной в http://www.wordicious.com
.
Хотя они очень похожи, они не являются одним и тем же доменом. И когда они не находятся в одном домене, запрос будет успешным только в том случае, если ответчик цели содержит заголовок Access-Control-Allow-Origin
.
Поскольку ваша страница / служба в http://wordicious.com
никогда не была настроена для представления (g2) Решение:
Как сказано, начало (где находится страница с JavaScript) и цель ) домены должны быть точно такими же.
Ваше дело похоже на опечатку. Похоже, http://wordicious.com
и http://www.wordicious.com
фактически являются тем же сервером / доменом. Поэтому, чтобы исправить, введите цель и источник поровну: сделайте страницы / службы запроса кода Ajax на http://www.wordicious.com
не http://wordicious.com
. (Возможно, поместите целевой URL относительно, например '/login.php'
, без домена).
Если проблема не похоже, что это вопрос, похожий на этот вопрос, решением было бы добавить Access-Control-Allow-Origin
в целевой домен. Чтобы добавить его, зависит, конечно, от сервера / языка, стоящего за этим адресом. Иногда переменная конфигурации в инструменте будет делать трюк. В других случаях вам придется добавлять заголовки через код самостоятельно.
Я сталкиваюсь с этой проблемой, когда я использую Angular
для публикации записи в Django REST
бэкэнд. Иногда нет особых причин для этой проблемы. Проверьте сообщение об ошибке Django, вы найдете решение.
вы должны поместить ключи / значения заголовков в ответ метода метода. например, если у вас есть ресурс в http://mydomain.com/myresource , тогда в коде сервера вы пишете
//response handler
void handleRequest(Request request, Response response) {
if(request.method == "OPTIONS") {
response.setHeader("Access-Control-Allow-Origin","http://clientDomain.com")
response.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS");
response.setHeader("Access-Control-Allow-Headers", "Content-Type");
}
}
Использовать addHeader
Вместо использования метода setHeader
,
response.addHeader("Access-Control-Allow-Origin", "*");
*
в приведенной выше строке позволит access to all domains
.
Для разрешения access to specific domain only
:
response.addHeader("Access-Control-Allow-Origin", "http://www.example.com");
Проверьте это blog post
.
Обходной путь заключается в использовании обратного прокси-сервера, запущенного на вашем «исходном» хосте, и пересылки на ваш целевой сервер, например Fiddler:
Ссылка здесь: http: //docs.telerik. com / fiddler / configure-fiddler / tasks / usefiddlerasreverseproxy
Или обратный прокси-сервер Apache ...
Если вы получите это сообщение об ошибке из браузера:
Нет заголовка «Access-Control-Allow-Origin» на запрошенном ресурсе. Поэтому Origin '...' не разрешает доступ
blockquote>, когда вы пытаетесь выполнить запрос AJAX POST / GET удаленному серверу, который вышел из-под контроля, пожалуйста, забудьте об этом простом исправлении :
<?php header('Access-Control-Allow-Origin: *'); ?>
Что вам действительно нужно делать, особенно если вы используете JavaScript для выполнения запроса Ajax, является внутренним прокси-сервером, который берет ваш запрос и отправляет его на удаленный сервер.
Сначала в вашем JavaScript, сделайте вызов Ajax на свой собственный сервер, например:
$.ajax({ url: yourserver.com/controller/proxy.php, async:false, type: "POST", dataType: "json", data: data, success: function (result) { JSON.parse(result); }, error: function (xhr, ajaxOptions, thrownError) { console.log(xhr); } });
Затем создайте простой PHP-файл с именем proxy.php, чтобы обернуть ваши данные POST и добавить их на удаленный URL-сервер в качестве параметров. Я приведу пример того, как я обойду эту проблему с API-интерфейсом API Expedia:
if (isset($_POST)) { $apiKey = $_POST['apiKey']; $cid = $_POST['cid']; $minorRev = 99; $url = 'http://api.ean.com/ean-services/rs/hotel/v3/list?' . 'cid='. $cid . '&' . 'minorRev=' . $minorRev . '&' . 'apiKey=' . $apiKey; echo json_encode(file_get_contents($url)); }
Выполняя:
echo json_encode(file_get_contents($url));
Вы делаете один и тот же запрос, но на на стороне сервера и после этого, он должен работать нормально.
В основном изменить ответ заголовка API, добавив следующие дополнительные параметры.
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Но это нехорошее решение, когда дело доходит до безопасности
Добавьте это к вам файл PHP или главный контроллер
header("Access-Control-Allow-Origin: http://localhost:9000");
header("Access-Control-Allow-Credentials: true");
– Adam
12 May 2016 в 20:12
Решено с помощью следующей записи в httpd.conf
#CORS Issue
Header set X-Content-Type-Options "nosniff"
Header always set Access-Control-Max-Age 1728000
Header always set Access-Control-Allow-Origin: "*"
Header always set Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT,PATCH"
Header always set Access-Control-Allow-Headers: "DNT,X-CustomHeader,Keep-Alive,Content-Type,Origin,Authentication,Authorization,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control"
Header always set Access-Control-Allow-Credentials true
#CORS REWRITE
RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
#RewriteRule ^(.*)$ $1 [R=200,L]
RewriteRule ^(.*)$ $1 [R=200,L,E=HTTP_ORIGIN:%{HTTP:ORIGIN}]]
Вам нужно добавить это при запуске вашей php-страницы «login.php»
<?php header('Access-Control-Allow-Origin: *'); ?>
Для .NET-сервера это можно настроить в web.config, как показано ниже
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="your_clientside_websiteurl" />
</customHeaders>
</httpProtocol>
</system.webServer>
Например, скажем, если домен сервера http://live.makemypublication.com , а клиент - http://www.makemypublication.com , затем настройте в web.config сервера, как показано ниже
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="http://www.makemypublication.com" />
</customHeaders>
</httpProtocol>
</system.webServer>