Ошибка xmlhttprequest есть null или не является объектом

Thought I would just report back my findings, now that I have it all working. The following client-side code (slightly abridged and anonymized) contains all the work-arounds I needed to address the prblems outlined in this thread and works on IE (8.0.6001), FF(3.5.9), and Chrome (5.0.375.55 beta). Still yet to test under older versions of browsers. Many thanks to all who responded.

I should also add that I needed to make sure that the server response needed to include:

Response.ContentType = "text/xml" ;

for it to work with IE. FF didn’t mind if the ContentType was text/HTML but IE coughed.

Code to create an XMLHTTP request:

function GetXMLHTTPRequest () 
{
var activexmodes=["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] ; //activeX versions to check for in IE
if (window.ActiveXObject)  //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken)
    {
    for (var i=0; i < activexmodes.length ; i++)
        {
        try
            {
            return new ActiveXObject(activexmodes[i]) ;
            }
        catch (e)
            {    //suppress error
            }
        }
    }
 else if (window.XMLHttpRequest) // if Mozilla, Safari etc
    {
    return new XMLHttpRequest () ;
    }
 else
    {
    return (false) ;
    }
}

Code to return the text value of a record node:

function GetRecordElement (ARecordNode, AFieldName)
{
try
    {
    if (ARecordNode.getElementsByTagName (AFieldName) [0].textContent != undefined)
        {
        return (ARecordNode.getElementsByTagName (AFieldName) [0].textContent) ; // Chrome, FF
        }

    if (ARecordNode.getElementsByTagName (AFieldName) [0].text != undefined)
        {
        return (ARecordNode.getElementsByTagName (AFieldName) [0].text) ;  //  IE
        }

    return ("unknown") ;    
    }
catch (Exception)
    {
    ReportError ("(GetRecordElement): " + Exception.description) ;
    }
}

Code to perform the AJAX request:

function GetRecord (s)
{
try 
    {
    ReportStatus ("") ;

    var xmlhttp = GetXMLHTTPRequest () ;
    if (xmlhttp)
        {
        xmlhttp.open ("GET", "blahblah.com/AJAXget.asp?...etc", true) ;

        if (xmlhttp.overrideMimeType) 
            {
            xmlhttp.overrideMimeType("text/xml") ;
            }
        xmlhttp.setRequestHeader ("Content-Type", "text/xml; charset="utf-8"") ; 

        xmlhttp.onreadystatechange = function () 
            {
            if (xmlhttp.readyState == 4) 
                {
                if (xmlhttp.responseXML != null)
                    {
                    var xmlDoc = xmlhttp.responseXML;                
                    var ResultNodes = xmlDoc.getElementsByTagName ("Result") ;
                    if (ResultNodes != null)
                        {
                        var PayloadNode = xmlDoc.getElementsByTagName ("Payload") ;
                        if (PayloadNode != null)
                            {
                            var ResultText = ResultNodes [0].firstChild.nodeValue ;
                            if (ResultText == "OK")
                                {
                                ReportStatus (ResultText) ;
                                var RecordNode  = PayloadNode [0].firstChild ;
                                if (RecordNode != null)
                                    {
                                    UpdateRecordDisplay (RecordNode) ; // eventually calls GetRecordElement 
                                    }
                                else
                                    {
                                    ReportError ("RecordNode is null") ;
                                    }
                                }
                            else
                                {
                                ReportError ("Unknown response:" + ResultText) ;
                                }             
                            }    
                        else
                            {
                            ReportError ("PayloadNode is null") ;
                            }
                        }    
                    else
                        {
                        ReportError ("ResultNodes is null") ;
                        }
                    }
                else   
                    {
                    ReportError ("responseXML is null") ;
                    }
                }    
            else
                {  
                ReportStatus ("Status=" + xmlhttp.readyState) ;
                }
            }    

        ReportStatus ("Requesting data ...") ;
        xmlhttp.send (null) ;
        }
    else
        {
        ReportError ("Unable to create request") ;
        }        
    }
catch (err)
    {
    ReportError ("(GetRecord): " + err.description) ;
    }
}

Thought I would just report back my findings, now that I have it all working. The following client-side code (slightly abridged and anonymized) contains all the work-arounds I needed to address the prblems outlined in this thread and works on IE (8.0.6001), FF(3.5.9), and Chrome (5.0.375.55 beta). Still yet to test under older versions of browsers. Many thanks to all who responded.

I should also add that I needed to make sure that the server response needed to include:

Response.ContentType = "text/xml" ;

for it to work with IE. FF didn’t mind if the ContentType was text/HTML but IE coughed.

Code to create an XMLHTTP request:

function GetXMLHTTPRequest () 
{
var activexmodes=["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] ; //activeX versions to check for in IE
if (window.ActiveXObject)  //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken)
    {
    for (var i=0; i < activexmodes.length ; i++)
        {
        try
            {
            return new ActiveXObject(activexmodes[i]) ;
            }
        catch (e)
            {    //suppress error
            }
        }
    }
 else if (window.XMLHttpRequest) // if Mozilla, Safari etc
    {
    return new XMLHttpRequest () ;
    }
 else
    {
    return (false) ;
    }
}

Code to return the text value of a record node:

function GetRecordElement (ARecordNode, AFieldName)
{
try
    {
    if (ARecordNode.getElementsByTagName (AFieldName) [0].textContent != undefined)
        {
        return (ARecordNode.getElementsByTagName (AFieldName) [0].textContent) ; // Chrome, FF
        }

    if (ARecordNode.getElementsByTagName (AFieldName) [0].text != undefined)
        {
        return (ARecordNode.getElementsByTagName (AFieldName) [0].text) ;  //  IE
        }

    return ("unknown") ;    
    }
catch (Exception)
    {
    ReportError ("(GetRecordElement): " + Exception.description) ;
    }
}

Code to perform the AJAX request:

function GetRecord (s)
{
try 
    {
    ReportStatus ("") ;

    var xmlhttp = GetXMLHTTPRequest () ;
    if (xmlhttp)
        {
        xmlhttp.open ("GET", "blahblah.com/AJAXget.asp?...etc", true) ;

        if (xmlhttp.overrideMimeType) 
            {
            xmlhttp.overrideMimeType("text/xml") ;
            }
        xmlhttp.setRequestHeader ("Content-Type", "text/xml; charset="utf-8"") ; 

        xmlhttp.onreadystatechange = function () 
            {
            if (xmlhttp.readyState == 4) 
                {
                if (xmlhttp.responseXML != null)
                    {
                    var xmlDoc = xmlhttp.responseXML;                
                    var ResultNodes = xmlDoc.getElementsByTagName ("Result") ;
                    if (ResultNodes != null)
                        {
                        var PayloadNode = xmlDoc.getElementsByTagName ("Payload") ;
                        if (PayloadNode != null)
                            {
                            var ResultText = ResultNodes [0].firstChild.nodeValue ;
                            if (ResultText == "OK")
                                {
                                ReportStatus (ResultText) ;
                                var RecordNode  = PayloadNode [0].firstChild ;
                                if (RecordNode != null)
                                    {
                                    UpdateRecordDisplay (RecordNode) ; // eventually calls GetRecordElement 
                                    }
                                else
                                    {
                                    ReportError ("RecordNode is null") ;
                                    }
                                }
                            else
                                {
                                ReportError ("Unknown response:" + ResultText) ;
                                }             
                            }    
                        else
                            {
                            ReportError ("PayloadNode is null") ;
                            }
                        }    
                    else
                        {
                        ReportError ("ResultNodes is null") ;
                        }
                    }
                else   
                    {
                    ReportError ("responseXML is null") ;
                    }
                }    
            else
                {  
                ReportStatus ("Status=" + xmlhttp.readyState) ;
                }
            }    

        ReportStatus ("Requesting data ...") ;
        xmlhttp.send (null) ;
        }
    else
        {
        ReportError ("Unable to create request") ;
        }        
    }
catch (err)
    {
    ReportError ("(GetRecord): " + err.description) ;
    }
}

Иногда встречается ошибка javascript … есть null или не является объектом.

Internet Explorer после такой ошибки останавливает дальнейшее выполнение сценария и (при соответствующей настройке) сообщает об ошибке желтым треугольником в левом нижнем углу.

Итак, в чем же дело.. Причем тут Null и объекты?

Очевидное объяснение — скрипт пытается обратиться к переменной, значение которой null,  или же это обращение к свойству переменной, которая не является объектом. Все-таки это ошибка javascript-программы.

Частые причины ошибки “есть null или не является объектом”

1. Попытка обратиться к несуществующему свойству объекта:
a=1; alert (a.property);

2. Попытка обратиться к несуществующему элементу массива:
a = []; alert (a[1]);

Internet Explorer в сообщении об ошибке указывает строку, в которой она обнаружена. Рекомендуется проверить все похожие обращения к переменным.

Если Вам известны другие причины появления ошибки  “null или не является объектом”- сообщайте в комментарии..

ps. В некоторых WYSIWYG-редакторах в ранних версиях часто встречались такие ошибки…

Метки: javascript


Опубликовано
Четверг, Август 5, 2010 в 12:58 в следующих категориях: Без рубрики.
Вы можете подписаться на комментарии к этому сообщению через RSS 2.0.

Вы можете добавить комментарий, или trackback со своего сайта.

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

BB-код (для вставки на форум)

html-код (для вставки в ЖЖ, WP, blogger и на страницы сайта)

ссылка (для отправки по почте)

Всем доброго времени суток.

У меня возникла проблема при реализации скрипта, который делает запрос к MySQL, не обновляя страницу. Нашел пример реализации такого скрипта (http://www.webmascon.com/topic… es/13a.asp), написал подобный на локальном сервере, но при тестировании возникает ошибка.

Строка:21
Символ: 4
Ошибка: ‘response’ есть null или не является объектом

Соответственно, ни какого соединения и обновления данных на странице не происходит.

Помогите мне, пожалуйста. Я уже голову себе сломал %)

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

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Пример</title>
<script language="JavaScript" type="text/javascript">
function GetNewVars(name,text,date)
    {
    document.getElementById('name').innerHTML = name;
    document.getElementById('text').innerHTML = text; 
    document.getElementById('date').innerHTML = date; 
    };
    
function processReqChange() 
{
    if (req.readyState == 4) 
        {
        if (req.status == 200) 
            {
              response = req.responseXML.documentElement;
            method = response.getElementsByTagName('method')[0].firstChild.data;
              name = response.getElementsByTagName('name')[0].firstChild.data;
              text = response.getElementsByTagName('text')[0].firstChild.data;
            date = response.getElementsByTagName('date')[0].firstChild.data;
 
              eval(method + ' (name,text,date)');
            };
        };
};
 
function loadXMLDoc(url) 
{
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.onreadystatechange = processReqChange;
        req.open("GET", url, true);
        req.send(null);
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = processReqChange;
            req.open("GET", url, true);
            req.send();
        };
    };
};
 
function Timer()
    {
    Second--;
    document.getElementById('time').innerHTML = Second;
    if (Second == Update)
        {Update = Second - 10;
        id++;
        url  = 'http://localhost/js_test.php?id='+id;
        loadXMLDoc(url);
        };
    };    
 
Second = 60;
Update = Second - 10;
id = 1;
 
interval = setInterval(Timer,1000);
</script>
</head>
 
<body>
 
<div id='time'></div>
<div id='name'></div>
<div id='text'></div>
<div id='date'></div>
 
<script type="text/javascript">document.getElementById('time').innerHTML = Second;</script>
</body>
</html>

— это основной файл «test.php». Он формирует страницу и запускает таймер. через каждые 10 сек должен происходить запрос к «js_test.php», и забираться из MySQL очередная запись.
Код «js_test.php»:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php 
include("blocks/connect.php");
$id = $_GET["id"];
$id = trim($id);
$r_info = mysql_query("SELECT * FROM news WHERE id = $id LIMIT 1");
$m_info = mysql_fetch_array($r_info);
echo ('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>');
echo("<response>");
echo("<name>".$m_info["name"]."</name>");
echo("<text>".$m_info["text"]."</text>");
echo("<date>".$m_info["date"]."</date>");
echo("</response>");
            
?>

Но ни чего не происходит. IE выводит вышеприведенную ошибку через каждые 10 сек.
Очень рассчитываю на вашу помощь. Заранее благодарен.

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

Я разрабатываю страницу, которая извлекает изображения из Flickr и Panoramio через поддержку AJAX jQuery.

сторона Flickr работает нормально, но когда я пытаюсь $.get(url, callback) из Panoramio я вижу ошибку в консоли Chrome:

XMLHttpRequest не удается загрузить http://www.panoramio.com/wapi/data/get_photos?v=1&key=dummykey&tag=test&offset=0&length=20&callback=processImages&minx=-30&miny=0&maxx=0&maxy=150 — … Origin null не допускается Access-Control-Allow-Origin.

Если я запрашиваю этот URL из браузера напрямую, он работает нормально. Что происходит, и могу ли я обойти это? Я составляю свой запрос неправильно, или это то, что Panoramio делает, чтобы помешать тому, что я пытаюсь сделать?

Google не обнаружил никаких полезных матчей на сообщение об ошибке.

редактировать

вот пример кода, который показывает проблема:

$().ready(function () {
  var url = 'http://www.panoramio.com/wapi/data/get_photos?v=1&key=dummykey&tag=test&offset=0&length=20&callback=processImages&minx=-30&miny=0&maxx=0&maxy=150';

  $.get(url, function (jsonp) {
    var processImages = function (data) {
      alert('ok');
    };

    eval(jsonp);
  });
});

вы можете запустите пример в интернете.

Изменить 2

спасибо Дарину за его помощь в этом. ПРИВЕДЕННЫЙ ВЫШЕ КОД НЕВЕРЕН. используйте этот код:

$().ready(function () {
  var url = 'http://www.panoramio.com/wapi/data/get_photos?v=1&key=dummykey&tag=test&offset=0&length=20&minx=-30&miny=0&maxx=0&maxy=150&callback=?';

  $.get(url, function (data) {
    // can use 'data' in here...
  });
});

16 ответов


для протокола, насколько я могу судить, у вас было две проблемы:—18—>

  1. вы не передавали спецификатор типа «jsonp» вашему $.get, поэтому он использовал обычный XMLHttpRequest. Однако ваш браузер поддерживал CORS (общий доступ к ресурсам Cross-Origin), чтобы разрешить междоменный XMLHttpRequest, если сервер его использовал. Вот где пришла.

  2. я думаю, вы упомянули, что вы запускали его из файла: / / URL. Есть два способа для заголовков CORS сигнализировать, что междоменный XHR в порядке. Один-послать Access-Control-Allow-Origin: * (который, если вы достигли Flickr через $.get, Они, должно быть, делали), в то время как другой должен был Эхо назад содержимое Origin заголовок. Однако,file:// URLs производят null Origin который не может быть авторизован через echo-back.

первый был решен окольным путем предложением Дарина использовать $.getJSON. Это немного волшебство, чтобы изменить тип запроса от его значение по умолчанию «json «для» jsonp», если он видит подстроку callback=? в URL.

это решило второе, больше не пытаясь выполнить запрос CORS от file:// URL-адрес.

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

  1. если вы пытаетесь использовать JSONP, убедитесь, что один из следующих случаев:
    • вы используете $.get и set dataType в jsonp.
    • вы используете $.getJSON и включен callback=? в URL.
  2. если вы пытаетесь выполнить междоменный XMLHttpRequest через CORS…
    1. убедитесь, что вы тестируете через http://. Скрипты, запущенные через file:// имеют ограниченную поддержку CORS.
    2. убедитесь, что браузер фактически поддерживает CORS. (Opera и Internet Explorer опаздывают на вечеринку)

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

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

Подробнее кросс-доменный AJAX-ОУ, веб-служб (по-французски).


для простого HTML-проекта:

cd project
python -m SimpleHTTPServer 8000

выберите файл.


работает для меня на Google Chrome v5.0.375.127 (я получаю предупреждение):

$.get('http://www.panoramio.com/wapi/data/get_photos?v=1&key=dummykey&tag=test&offset=0&length=20&callback=?&minx=-30&miny=0&maxx=0&maxy=150',
function(json) {
    alert(json.photos[1].photoUrl);
});

также я бы рекомендовал вам использовать $.getJSON() метод вместо этого, как и предыдущий не работает на IE8 (по крайней мере на моей машине):

$.getJSON('http://www.panoramio.com/wapi/data/get_photos?v=1&key=dummykey&tag=test&offset=0&length=20&callback=?&minx=-30&miny=0&maxx=0&maxy=150', 
function(json) {
    alert(json.photos[1].photoUrl);
});

вы можете онлайн отсюда.


обновление:

теперь, когда вы показали свой код, я вижу с этим проблем. У вас есть как анонимная функция, так и встроенная функция, но оба будут называться processImages. Вот как работает поддержка JSONP jQuery. Обратите внимание, как я определяю callback=? чтобы вы могли использовать анонимную функцию. Вы можете прочитать больше об этом в документации.

еще одно замечание: вы не должны звонить эвалу. Параметр, переданный вашей анонимной функции, уже будет проанализирован в JSON с помощью jQuery.


пока запрашиваемый сервер поддерживает формат данных JSON, используйте интерфейс JSONP (JSON Padding). Это позволяет вам делать внешние доменные запросы без прокси-серверов или причудливых заголовков.



нам удалось это через http.conf файл (отредактирован и перезапущен службой HTTP):

<Directory "/home/the directory_where_your_serverside_pages_is">
    Header set Access-Control-Allow-Origin "*"
    AllowOverride all
    Order allow,deny
    Allow from all
</Directory>

на Header set Access-Control-Allow-Origin "*", вы можете поставить точный URL.


Если вы выполняете локальное тестирование или вызываете файл из чего-то вроде file:// тогда вам нужно отключить безопасность браузера.

на MAC:
open -a Google Chrome --args --disable-web-security


в моем случае тот же код отлично работал в Firefox, но не в Google Chrome. Консоль JavaScript Google Chrome сказала:

XMLHttpRequest cannot load http://www.xyz.com/getZipInfo.php?zip=11234. 
Origin http://xyz.com is not allowed by Access-Control-Allow-Origin.
Refused to get unsafe header "X-JSON"

мне пришлось удалить часть www URL Ajax, чтобы она правильно соответствовала исходному URL-адресу, и тогда она работала нормально.


Не все серверы поддерживают jsonp. Это требует, чтобы сервер установил функцию обратного вызова в его результатах. Я использую это, чтобы получить ответы json с сайтов, которые возвращают чистый json, но не поддерживают jsonp:

function AjaxFeed(){

    return $.ajax({
        url:            'http://somesite.com/somejsonfile.php',
        data:           {something: true},
        dataType:       'jsonp',

        /* Very important */
        contentType:    'application/json',
    });
}

function GetData() {
    AjaxFeed()

    /* Everything worked okay. Hooray */
    .done(function(data){
        return data;
    })

    /* Okay jQuery is stupid manually fix things */
    .fail(function(jqXHR) {

        /* Build HTML and update */
        var data = jQuery.parseJSON(jqXHR.responseText);

        return data;
    });
}

Я использую сервер Apache, поэтому я использовал модуль mod_proxy. Включить модули:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

потом добавил:

ProxyPass /your-proxy-url/ http://service-url:serviceport/

наконец, передайте прокси-url вашему скрипту.


в качестве заключительной ноты документация Mozilla явно говорит это

приведенный выше пример завершится ошибкой, если заголовок будет помечен как:
Access-Control-Allow-Origin: *. поскольку Access-Control-Allow-Origin явно упоминает http://foo.пример,
содержимое credential-cognizant возвращается в вызывающий веб
содержание.

Как следствие-это не просто плохая практика, чтобы использовать ‘*’. Просто делать не работать:)


Я также получил ту же ошибку в Chrome (я не проверяла другие браузеры). Это было из-за того, что я двигался дальше. domain.com вместо www.domain.com — … Немного странно ,но я мог бы решить проблему, добавив следующие строки.реврайт. Он перенаправляет domain.com к www.domain.com и проблема была решена. Я ленивый веб-посетитель, поэтому я почти никогда не печатаю www, но, по-видимому, в некоторых случаях это требуется.

RewriteEngine on
RewriteCond %{HTTP_HOST} ^domain.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/ [R=301,L]

убедитесь, что вы используете последнюю версию jQuery. Мы столкнулись с этой ошибкой для JQuery 1.10.2, и ошибка была решена после использования JQuery 1.11.1

0

автор: Ganesh Kamath — ‘Code Frenzy’


люди,

Я столкнулся с аналогичной проблемой. Но, используя Fiddler, я смог добраться до проблемы. Проблема в том, что URL-адрес клиента, настроенный в реализации CORS на стороне веб-API,не должен иметь косой черты. После отправки запроса через Google Chrome и проверьте TextView на заголовки раздел скрипача, сообщение об ошибке гласит что-то вроде этого:

*»указанное происхождение политики your_client_url:/’ является недопустимым. Он не может заканчиваться косой чертой.»

Это очень странно, потому что он работал без каких-либо проблем в Internet Explorer, но дал мне головную боль при тестировании с помощью Google Chrome.

Я удалил косую черту в коде CORS и перекомпилировал веб-API, и теперь API доступен через Chrome и Internet Explorer без каких-либо проблем. Пожалуйста, попробуй.

спасибо,
Энди!—1—>


в опубликованном решении есть небольшая проблема по CodeGroover выше, где, если вы измените файл, вам придется перезапустить сервер, чтобы фактически использовать обновленный файл (по крайней мере, в моем случае).

Так что поиск немного, я нашел этот использование:

sudo npm -g install simple-http-server # to install
nserver # to use

и тогда он будет служить в http://localhost:8000.


Cannot get data with XMLHttpRequest (status 0 and responseText is empty):

xmlhttp=new XMLHttpRequest();
xmlhttp.open("GET","http://www.w3schools.com/XML/cd_catalog.xml", true);
xmlhttp.onreadystatechange=function() 
{
  if(xmlhttp.readyState==4)
    alert("status " + xmlhttp.status);
}
xmlhttp.send();

It alerts «status 0».

The same situation with the localhost request (cd_catalog.xml is saved as a local file)

xmlhttp.open("GET","http://localhost/cd_catalog.xml", true);

But with the localhost IP request

xmlhttp.open("GET","http://127.0.0.1/cd_catalog.xml", true);

and with the local file request

xmlhttp.open("GET","cd_catalog.xml", true);

everything is OK (status 200)

What can cause the problem (status=0) with the online request?

PS: Live HTTP Headers shows that everything is OK in all 4 cases:

  HTTP/1.1 200 OK
  Content-Length: 4742

PS2: Apache local web server on VMWare (host OS Win7, Guest OS Ubuntu, Network adapter – NAT). Browser – Firefox.

sdo's user avatar

sdo

6523 silver badges13 bronze badges

asked Feb 15, 2011 at 15:54

arigasa's user avatar

9

status is 0 when your html file containing the script is opened in the browser via the file scheme. Make sure to place the files in your server (apache or tomcat whatever) and then open it via http protocol in the browser. (i.e. http://localhost/myfile.html) This is the solution.

YakovL's user avatar

YakovL

7,17112 gold badges58 silver badges93 bronze badges

answered Apr 16, 2012 at 11:58

Abhishek_8's user avatar

Abhishek_8Abhishek_8

6315 silver badges2 bronze badges

7

The cause of your problems is that you are trying to do a cross-domain call and it fails.

If you’re doing localhost development you can make cross-domain calls — I do it all the time.

For Firefox, you have to enable it in your config settings

signed.applets.codebase_principal_support = true

Then add something like this to your XHR open code:

  if (isLocalHost()){
    if (typeof(netscape) != 'undefined' && typeof(netscape.security) != 'undefined'){
      netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');
    }
  }

For IE, if I remember right, all you have to do is enable the browser’s Security setting under «Miscellaneous → Access data sources across domains» to get it to work with ActiveX XHRs.

IE8 and above also added cross-domain capabilities to the native XmlHttpRequest objects, but I haven’t played with those yet.

Greg Dubicki's user avatar

Greg Dubicki

5,3972 gold badges54 silver badges64 bronze badges

answered Mar 8, 2011 at 1:27

Slammer's user avatar

SlammerSlammer

3312 silver badges2 bronze badges

5

Actually make sure your button type is Button not Submit, that caused status conflict where I met recently.

answered Dec 29, 2011 at 17:14

dyuan's user avatar

dyuandyuan

2613 silver badges2 bronze badges

1

If the server responds to an OPTIONS method and to GET and POST (whichever of them you’re using) with a header like:

Access-Control-Allow-Origin: *

It might work OK. Seems to in FireFox 3.5 and rekonq 0.4.0.
Apparently, with that header and the initial response to OPTIONS, the server is saying to the browser, «Go ahead and let this cross-domain request go through.»

robsch's user avatar

robsch

9,1148 gold badges61 silver badges96 bronze badges

answered Sep 30, 2011 at 9:40

Alex Robinson's user avatar

1

Consider also the request timeout:

Modern browser return readyState=4 and status=0 if too much time passes before the server response.

Alexis Wilke's user avatar

Alexis Wilke

18.3k10 gold badges79 silver badges144 bronze badges

answered Jun 29, 2016 at 10:56

Andrea Savojardo's user avatar

3

Add setRequestHeader("Access-Control-Allow-Origin","*") to your server response.

Geo's user avatar

Geo

3,1285 gold badges40 silver badges82 bronze badges

answered May 5, 2013 at 10:44

Ivan's user avatar

IvanIvan

711 silver badge1 bronze badge

I had faced a similar problem. Every thing was okay, the «readystate» was 4, but the «status» was 0. It was because I was using a Apache PHP portable server and my file in which I used the «XMLHttpRequest» object was a html file. I changed the file extension to php and the problem was solved.

answered Nov 7, 2011 at 3:16

Reyan's user avatar

ReyanReyan

411 bronze badge

Open javascript console. You’ll see an error message there. In my case it was CORS.

answered Dec 29, 2017 at 23:35

Jarekczek's user avatar

JarekczekJarekczek

7,2663 gold badges44 silver badges66 bronze badges

To see what the problem is, when you get the cryptic error 0 go to … | More Tools | Developer Tools (Ctrl+Shift+I) in Chrome (on the page giving the error)

Read the red text in the log to get the true error message. If there is too much in there, right-click and Clear Console, then do your last request again.

My first problem was, I was passing in Authorization headers to my own cross-domain web service for the browser for the first time.

I already had:

Access-Control-Allow-Origin: *

But not:

Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Authorization

in the response header of my web service.

After I added that, my error zero was gone from my own web server, as well as when running the index.html file locally without a web server, but was still giving errors in code pen.

Back to … | More Tools | Developer Tools while getting the error in codepen, and there is clearly explained: codepen uses https, so I cannot make calls to http, as the security is lower.

I need to therefore host my web service on https.

Knowing how to get the true error message — priceless!

answered Sep 7, 2018 at 17:11

Maya's user avatar

MayaMaya

4217 silver badges12 bronze badges

1

To answer the question of why http://127.0.0.1/cd_catalog.xml works while
http://localhost/cd_catalog.xml doesn’t: Firefox is treating 127.0.0.1 and localhost as two different domains.

answered May 30, 2013 at 10:09

Tomi Aarnio's user avatar

Tomi AarnioTomi Aarnio

2,3461 gold badge19 silver badges13 bronze badges

Here’s another case in which status === 0, specific to uploading:

If you attach a 'load' event handler to XHR.upload, as suggested by MDN (scroll down to the upload part of ‘Monitoring progress’), the XHR object will have status=0 and all the other properties will be empty strings. If you attach the 'load' handler directly to the XHR object, as you would when downloading content, you should be fine (given you’re not running off localhost).

However, if you want to get good data in your 'progress' event handlers, you need to attach a handler to XHR.upload, not directly to the XHR object itself.

I’ve only tested this so far on Chrome OSX, so I’m not sure how much of the problem here is MDN’s documentation and how much is Chrome’s implementation…

answered Apr 18, 2015 at 22:46

ericsoco's user avatar

ericsocoericsoco

23.9k29 gold badges97 silver badges127 bronze badges

Alex Robinson already (and first) gives the correct answer to this issue. But to elaborate it a little more…

You must add the HTTP response header:

Access-Control-Allow-Origin: *

If you do this, the result is not just ‘might work’, but ‘will work’.

NB What you need to add is an HTTP response header — so you can only do this on a server which you control. It will never be possible to directly fetch http://w3schools.com/XML/cd_catalog.xml from its original URL using an XMLHttpRequest (as per OP’s question), because that resource does not (at least, not as of 24 Apr 2015) include any such CORS header.

http://en.wikipedia.org/wiki/Cross-origin_resource_sharing gives more info.

answered Apr 24, 2015 at 9:01

MikeBeaton's user avatar

MikeBeatonMikeBeaton

3,0483 gold badges34 silver badges44 bronze badges

My problem similar to this was solved by checking my html code. I was having an onclick handler in my form submit button to a method. like this : onclick="sendFalconRequestWithHeaders()". This method in turn calls ajax just like yours, and does what I want. But not as expected, my browser was returning nothing.

Learned From someone’s hardwork, I have returned false in this handler, and solved.
Let me mention that before arriving to this post, I have spent a whole 3-day weekend and a half day in office writing code implementing CORS filters, jetty config, other jersey and embedded jetty related stuff — just to fix this., revolving all my understanding around cross domain ajax requests and standards stuff. It was ridiculous how simple mistakes in javascript make you dumb.

To be true, I have tried signed.applets.codebase_principal_support = true and written isLocalHost() **if**. may be this method needs to be implemented by us, firefox says there is no such
Now I have to clean my code to submit git patch cleanly. Thanks to that someone.

answered Nov 25, 2013 at 8:57

Siva Tumma's user avatar

Siva TummaSiva Tumma

1,68712 silver badges23 bronze badges

A browser request «127.0.0.1/somefile.html» arrives unchanged to the local webserver, while «localhost/somefile.html» may arrive as «0:0:0:0:0:0:0:1/somefile.html» if IPv6 is supported.
So the latter can be processed as going from a domain to another.

answered Aug 10, 2015 at 17:00

Massimo Roscio's user avatar

Alex Robinson and bmju provided valuable information to understand cross-origin issues. I wanted to add that you may need to make an explicit OPTIONS call in your client code before making the desired GET/POST (e.g. against a CORS OAuth service endpoint). Your browser/library may not automatically handle the OPTIONS request. Gruber, this is one of the possible answers to your question.

answered Sep 2, 2015 at 8:08

Tim McConnell's user avatar

I had the same problem (readyState was 4 and status 0), then I followed a different approach explained in this tutorial:
https://spring.io/guides/gs/consuming-rest-jquery/

He didn’t use XMLHttpRequest at all, instead he used jquery $.ajax() method:

<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <script src="hello.js"></script>
</head>

<body>
    <div>
        <p class="greeting-id">The ID is </p>
        <p class="greeting-content">The content is </p>
    </div>
</body>

and for the public/hello.js file (or you could insert it in the same HTML code directly):

$(document).ready(function() 
 {
    $.ajax({
        url: "http://rest-service.guides.spring.io/greeting"
   }).then(function(data) {
      $('.greeting-id').append(data.id);
      $('.greeting-content').append(data.content);
   });
 });

answered Nov 23, 2016 at 11:54

RMDev's user avatar

RMDevRMDev

1631 silver badge11 bronze badges

1

I had to add my current IP address (again) to the Atlas MongoDB whitelist and so got rid of the XMLHttpRequest status 0 error

answered Sep 28, 2018 at 17:07

Anja's user avatar

AnjaAnja

4394 silver badges11 bronze badges

bottle app in python:

@route('/mazer2/get', method='POST')
def GetMaze2():
    if MazeCore == None: abort(666, "MazeCore поломался :///")
    Check()
    Comm = request.body.read().decode("utf-8")
    Map = MazeCore.GetMaze2(Comm, TestToken2())
    response.headers["Access-Control-Allow-Origin"] = "*" #Here ;'-} It helped me
    return Map

answered Mar 6, 2021 at 13:49

VectorASD's user avatar

I had the same problem when I tried to consume some web methods created by python in a flask environment, by XMLHttpRequest.
After inspecting the firefox console, I realised that the cause of problem was Same Origin Policy, which prevents calling web methods of a different ORIGIN (An Origin consists of a 3 part tuple including: protocol, domain, and port number).
For me, the solution was to use CORS, and fortunately there is a python package named flask-cors which I used and everything works fine.

answered Aug 28, 2021 at 18:04

Ehsan's user avatar

EhsanEhsan

112 bronze badges

I just had this issue because I used 0.0.0.0 as my server, changed it to localhost and it works.

answered Mar 29, 2019 at 13:45

Vad's user avatar

VadVad

3,9243 gold badges27 silver badges34 bronze badges

Edit: Please read Malvolio’s comments below as this answer’s knowledge is outdated.

You cannot do cross-domain XMLHttpRequests.

The call to 127.0.0.1 works because your test page is located at 127.0.0.1, and the local test also works since, well… it’s a local test.

The other two tests fail because JavaScript cannot communicate with a distant server through XMLHttpRequest.

You might instead consider either:

  • XMLHttp-request your own server to fetch your remote XML content for you (php script, for example)
  • Trying to use a service like GoogleAppEngine if you want to keep it full JavaScript.

Hope that helps

answered Feb 15, 2011 at 16:16

Gabriel S.'s user avatar

Gabriel S.Gabriel S.

1,9412 gold badges20 silver badges30 bronze badges

4

XMLHttpRequest это API, который предоставляет клиенту функциональность для обмена данными между клиентом и сервером. Данный API предоставляет простой способ получения данных по ссылке без перезагрузки страницы. Это позволяет обновлять только часть веб-страницы не прерывая пользователя. XMLHttpRequest используется в AJAX запросах и особенно в single-page приложениях.

XMLHttpRequest изначально был разработан Microsoft и позже заимствован Mozilla, Apple, и Google. Сейчас он стандартизирован WHATWG. Несмотря на своё название, XMLHttpRequest может быть использован для получения любых типов данных, не только XML, и поддерживает протоколы помимо HTTP (включая file и ftp).

Чтобы начать работать с XMLHttpRequest, выполните этот код:

var myRequest = new XMLHttpRequest();

более детальное описание создание объекта, можно увидеть в разделе Using XMLHttpRequest.

Список методов объекта

XMLHttpRequest(JSObject objParameters);
void abort();
DOMString getAllResponseHeaders();
DOMString? getResponseHeader(DOMString header);
void open(DOMString method, DOMString url, optional boolean async, optional DOMString? user, optional DOMString? password);
void overrideMimeType(DOMString mime);
void send(); void send(ArrayBufferView data); void send(Blob data); void send(Document data); void send(DOMString? data); void send(FormData data);
void setRequestHeader(DOMString header, DOMString value);
Нестандартные методы
[noscript] void init(in nsIPrincipal principal, in nsIScriptContext scriptContext, in nsPIDOMWindow ownerWindow);
[noscript] void openRequest(in AUTF8String method, in AUTF8String url, in boolean async, in AString user, in AString password);
void sendAsBinary(in DOMString body); Устарело

Поля объекта

Attribute Type Description

onreadystatechange

Function?

Callback — функция, которая вызывается всякий раз, когда поле
readyState меняет своё значение. Callback выполняется в
потоке работы приложения.

Внимание: Он не должен использоваться в синхронных
запросах, и не должен выполняться из нативного кода (? must not be
used from native code).

readyState unsigned short

Состояние запроса:

Значение Состояние Описание
0 UNSENT Клиент создан. Метод open() ещё не вызван.
1 OPENED Вызван метод open(). В этом состоянии можно
добавить заголовки через метод setRequestHeader();
вызов метода send() отправит запрос.
2 HEADERS_RECEIVED Вызван метод send(), получены заголовки и код
ответа (200, 404, 501 и проч.).
3 LOADING Загрузка; если значение responseType равно «text»
или пустой строке, то responseText содержит
частичные данные.
4 DONE Операция завершена. Все данные получены.
response varies

Тело сущности запроса. Согласно полю
responseType, может быть
ArrayBuffer, Blob, Document, JavaScript объектом (для «json»),
или строкой. Равно null если запрос не завершён или
окончен с ошибкой.

responseText Только для чтения DOMString Ответ на запрос в виде строки или null в случае если запрос
не успешен или ответ ещё не получен.
responseType XMLHttpRequestResponseType

Может использоваться для определения типа ответа.

Value Data type of response property
"" (пустая строка) String (строка, дефолтное значение)
"arraybuffer" ArrayBuffer
"blob" Blob
"document" Document
"json" JavaScript объект, полученный путём парсинга JSON строки,
полученной с сервера.
"text" String (строка)
"moz-blob" Firefox — велосипед, который позволяет работать с
частично-полученными данными Blob при
помощи событий прогресса (progressing events). Эта штука
позволяет работать с ответом от сервера, до того как он получен
полностью.
"moz-chunked-text"

Похоже на поле "text", но только находится в
потоке(streaming). Это значит, что значение доступно только в
промежуток времени между событиями прогресса ("progress"
event), и содержит данные которые пришли из последнего события
прогресса.

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

Работает только в Firefox.

"moz-chunked-arraybuffer"

Похоже на поле "arraybuffer", но только находится
в потоке(streaming). Это значит, что значение доступно только
в промежуток времени между событиями прогресса ("progress"
event), и содержит данные которые пришли из последнего события
прогресса.

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

Работает только в Firefox.

Note: Starting with Gecko 11.0
(Firefox 11.0 / Thunderbird 11.0 / SeaMonkey 2.8), as well as WebKit build 528,
these browsers no longer let you use the
responseType attribute when performing synchronous
requests. Attempting to do so throws an
NS_ERROR_DOM_INVALID_ACCESS_ERR exception. This change
has been proposed to the W3C for standardization.

responseXML Только для чтения Document?

Ответ является объектом DOM
Document, или
null в случае если запрос окончился ошибкой, или ответ не получен
полностью, или если ответ невозможно распарсить как
XML или HTML. Ответ парсится как если бы это был
text/xml stream. Когда значение
responseType равно "document" и запрос
выполнен асинхронно, ответ парсится как text/html stream.

Примечание: Если сервер не работает с заголовком (не
присылает в ответе) «Content-type: text/xml", то можно
использовать метод
overrideMimeType() для того чтобы парсить получаемый ответ как XML.

status Только для чтения unsigned short Статус ответа на запрос. Равен кодам HTTP (200 — успешно, 404 не
найдено, 301 — перенесено навсегда).
statusText Только для чтения DOMString Строка статуса ответа. В отличи от поля status, эта строка
включает в себя текст — («200 OK«, например).
timeout unsigned long

Время в миллисекундах, после которого запрос будет отменён. Значение 0
(по умолчанию) значит что таймаута не будет. Никогда.

Примечание: Вы можете не использовать поле timeout
для синхронных запросов из owning window.

ontimeout Function

Колбэк-функция которая будет вызвана в случае таймаута.

upload XMLHttpRequestUpload Загрузка (upload process) может отслеживаться обработчиком события.
withCredentials boolean

Определяет что cross-site запрос, согласно
Access-Control должен использовать авторизацию (креды для
логина и пароля) через куки, или заголовок с авторизационными данными.
По умолчанию false.

Примечание: Не влияет на same-site запросы.

Примечание: Начиная с Gecko 11.0
(Firefox 11.0 / Thunderbird 11.0 / SeaMonkey 2.8), Gecko больше не позволяет
использовать поле withCredentials при выполнении
синхронных запросов. Попытка выполнить это выбрасывает
NS_ERROR_DOM_INVALID_ACCESS_ERR исключение.

Нестандартные свойства

Attribute Type Description
channel Только для чтения nsIChannel The channel used by the object when performing the request. This is
null if the channel hasn’t been created yet. In the case of
a multi-part request, this is the initial channel, not the different
parts in the multi-part request.
Requires elevated privileges to access.
mozAnon Только для чтения boolean

Если значение равно true, запрос отправляется без куки и заголовков
авторизации.

mozSystem Только для чтения boolean

Если значение равно true, same origin policy не будут использоваться в
запросе (кроссдоменный запрос не сработает).

mozBackgroundRequest boolean

Этот метод не может быть вызван из контекста страницы. Для того
чтобы воспользоваться им нужны повышенные привелегии (elevated
privileges).

Флаг, означающий что запрос от пользователя надо скрыть. Для
пользователя не появится никаких сообщений и/или оповещений что запрос
вообще был.

В случае, если для продолжения запроса нужна какая-то аутентификация,
и в других случаях было бы отображено оповещение, этот запрос просто
не сработает.

Note: Этот флаг должен быть выставлен до вызова метода open().

mozResponseArrayBuffer Вышла из употребления с версии Gecko 6
Только для чтения
ArrayBuffer Массив, в который ляжет ответ от сервера, если ответ приходит в виде
Javascript массива ([]). В случае, если запрос не удалось завершить, или
если запрос не был отправлен, то это поле будет null.
multipart Вышла из употребления с версии Gecko 22 boolean

This Gecko-only feature was removed in Firefox/Gecko 22.
Please use
Server-Sent Events,
Web Sockets, or responseText from progress events instead.

Indicates whether or not the response is expected to be a stream of
possibly multiple XML documents. If set to true, the
content type of the initial response must be
multipart/x-mixed-replace or an error will occur. All
requests must be asynchronous.

This enables support for server push; for each XML document that’s
written to this request, a new XML DOM document is created and the
onload handler is called between documents.

Note: When this is set, the
onload handler and other event handlers are not reset
after the first XMLdocument is loaded, and the
onload handler is called after each part of the response
is received.

Конструктор

XMLHttpRequest()

Конструктор создаёт объект XMLHttpRequest. Он должен быть вызван перед обращением к любому методу класса.

Gecko/Firefox 16 добавляет нестандартные параметры в конструктор, для лучшего взаимодействия с режимом инкогнито, (смотри Bug 692677). Установка флага mozAnon в значение true создаёт сущность AnonXMLHttpRequest() описанную в XMLHttpRequest спецификации, но не реализованную не в одном из браузеров (информация сентября 2012).

XMLHttpRequest (
  JSObject objParameters
);
Параметры (нестандартные)
objParameters

Вы можете использовать два флага:

mozAnon

Boolean: Использование этого флага уберёт из запроса заголовки origin, и user credentials. Кроме этого, куки не будут отправлены в запросе, если только они не будут добавлены к запросу специально, через метод setRequestHeader.

mozSystem

Boolean: Если выставить этот флаг в значение true то это позволит делать cross-доменные запросы без необходимости получения специальных заголовков со стороны сервера (CORS). Для использования этого флага необходимо использовать дополнительный флаг* mozAnon: true, поскольку для отправки запроса на другой домен, нельзя использовать куки и креды пользователя. Этот флаг работает только с привилегированными (одобренными) приложениями; он не сработает с произвольно загруженными страницами.*

Методы

abort()

Отменяет запрос, если он был отправлен.

DOMString getAllResponseHeaders();

Возвращает все заголовки ответа как строку, или null если ответ не был получен. Для multypart запросов возвращает заголовки текущей части запроса, а не всего канала.

DOMString? getResponseHeader(DOMString header);

Возвращает значение указанного заголовка из полученного ответа, или null в случает если ответ не получен, или такого заголовка в ответе нет. Возвращаемая строка имеет кодировку UTF.

Примечание: Примечание: Если в ответе есть заголовки с одни названием, то значения этих заголовков будут объеденены в одну строку, разделённую запятой и пробелом.

open()

Инициализирует запрос. Этот метод может (и должен) быть вызван из JavaScript-кода; если необходимо вызвать запрос из нативного кода, то нужно использовать метод openRequest().

Примечание: Вызов этого метода из активного запроса (если метод open() или openRequest() уже были вызваны) эквивалентно вызову метода abort().

void open(
   DOMString method,
   DOMString url,
   optional boolean async,
   optional DOMString user,
   optional DOMString password
);
Параметры
method

HTTP метод отправки сообщения — «GET», «POST», «PUT», «DELETE», и проч.. Ignored for non-HTTP(S) URLs.

url

URL адрес, на который будет отправлено сообщение.

async

Необязательный boolean параметр, по умолчанию равный true. Определяет, будет ли запрос отправлен асинхронно. Если значение равно false, метод send() вернёт ответ в общем потоке работы приложения (иначе говоря, приложение зависнет на некоторое время), в противном случае, ответ может быть получен только при помощи определённых обработчиков событий. В случае, если используется отправка multipart запроса, то этот атрибут должен быть true, или будет выброшено исключение.

Примечание: Начиная с Gecko 30.0 (Firefox 30.0 / Thunderbird 30.0 / SeaMonkey 2.27), синхронные запросы объявлены как deprecated, в силу того что все пользователи недовольны тем, что приложение «зависает».

user

Необязательный параметр, используется для аутентификации пользователя. По умолчанию, пустая строка.

password

Необязательный параметр, используется для аутентификации пользователя. По умолчанию пустая строка.

overrideMimeType()

Переопределяет MIME тип, получаемый от сервера. Это может быть использовано, например, для того чтобы получить и распарсить данные в формате text/xml, даже, если сервер сообщает что это не так. Этот метод должен быть вызван перед вызовом метода send().

void overrideMimeType(DOMString mimetype);

send()

Отправляет запрос. Если запрос асинхронный (а по умолчанию это так), этот метод вернёт значение сразу после того как метод вызван.

Примечание: Примечание переводчика: в этом случае, в ответе не будет содержаться информации, которая пришла с сервера, поскольку она ещё не пришла. Для того чтобы получить эту информацию, нужно слушать события загрузки, или использовать promise.

Если запрос синхронный, то метод вернёт значение только после того, как придёт запрос от сервера.

Примечание: все необходимые обработчики событий должны быть установлены перед вызовом send().

Примечание: Лучше не использовать параметр ArrayBuffer. Сейчас он не входит в спецификацию XMLHttpRequest. Вместо него можно использовать ArrayBufferView (смотри таблицу совместимости для различных версий).

void send();
void send(ArrayBuffer data);
void send(ArrayBufferView data);
void send(Blob data);
void send(Document data);
void send(DOMString? data);
void send(FormData data);
Примечания

Если тип dataDocument, то он будет сериализован перед отправкой. Firefox до версии 3 всегда отправляет такой запрос в кодировке UTF-8; Firefox 3 отправляет данные в той кодировке, которая указаны в body.xmlEncoding, или UTF-8 если такой информации нет.

If it’s an nsIInputStream, it must be compatible with nsIUploadChannel‘s setUploadStream() method. In that case, a Content-Length header is added to the request, with its value obtained using nsIInputStream‘s available() method. Any headers included at the top of the stream are treated as part of the message body. The stream’s MIMEtype should be specified by setting the Content-Type header using the setRequestHeader() method prior to calling send().

The best way to send binary content (like in files upload) is using an ArrayBufferView (en-US) or Blobs (en-US) in conjuncton with the send() method. However, if you want to send a stringifiable (en-US) raw data, use the sendAsBinary() (en-US) method instead, or the StringView Non native typed arrays superclass.

Устанавливает значение заголовка HTTP-запроса. Вы должны вызвать setRequestHeader() после open(), но перед send(). Если данный метод вызывается несколько раз с одним и тем же заголовком, все значения объединяются в один заголовок запроса.

void setRequestHeader(
   DOMString header,
   DOMString value
);
Параметры

Имя заголовка, значение которого будет установлено.

value

Значение, заданное как тело заголовка.

Нестандартные методы

init()

Инициализирует объект для использования с C++ кодом.

Предупреждение: Внимание: Этот метод нельзя вызывать из JavaScript.

[noscript] void init(
   in nsIPrincipal principal,
   in nsIScriptContext scriptContext,
   in nsPIDOMWindow ownerWindow
);
Параметры
principal

Принцип, используемый для запроса; не должен быть null.

scriptContext

Контекст скрипта, используемого для запроса; не должен быть null.

ownerWindow

Окно, связанное с запросом; может быть null.

openRequest()

Инициализирует запрос. Этот метод должен использоваться из собственного кода; для инициализации запроса из кода JavaScript вместо этого используйте используйте open() метод. Смотрите документацию для open().

sendAsBinary() Устарело

Вариант метода send() который посылает бинарные данные.

Примечание: Этот нестандартный метод считается устарелым по состоянию на Gecko 31 (Firefox 31 / Thunderbird 31 / SeaMonkey 2.28), и со временем будет удалён. Взамен может использоваться стандарт метода send(Blob data).

void sendAsBinary(
   in DOMString body
);

Данный метод используется в сочетании с методом readAsBinaryString, который присутствует в FileReader (en-US) API, и позволяет прочитать и загрузить файл любого типа (en-US) и превратить необработанные данные в JSON-строку (en-US).

Параметры
body

Тело запроса в виде DOMstring. Эти данные конвертированы в строку с однобайтовыми символами с помощью усечения (удаления байта с высоким порядком в каждом символе).

sendAsBinary() polyfill

Since sendAsBinary() is an experimental feature, here is a polyfill for browsers that don’t support the sendAsBinary() method but support typed arrays (en-US).

/*
|*|
|*|  :: XMLHttpRequest.prototype.sendAsBinary() Polyfill ::
|*|
|*|  https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#sendAsBinary()
|*|
*/

if (!XMLHttpRequest.prototype.sendAsBinary) {
  XMLHttpRequest.prototype.sendAsBinary = function (sData) {
    var nBytes = sData.length, ui8Data = new Uint8Array(nBytes);
    for (var nIdx = 0; nIdx < nBytes; nIdx++) {
      ui8Data[nIdx] = sData.charCodeAt(nIdx) & 0xff;
    }
    /* send as ArrayBufferView...: */
    this.send(ui8Data);
    /* ...or as ArrayBuffer (legacy)...: this.send(ui8Data.buffer); */
  };
}

Примечание: It’s possible to build this polyfill putting two types of data as argument for send(): an ArrayBuffer (en-US) (ui8Data.buffer – the commented code) or an ArrayBufferView (en-US) (ui8Data, which is a typed array of 8-bit unsigned integers (en-US) – uncommented code). However, on Google Chrome, when you try to send an ArrayBuffer, the following warning message will appear: ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead. Another possible approach to send binary data is the StringView Non native typed arrays superclass in conjunction with the send() method.

Notes

  • By default, Firefox 3 limits the number of XMLHttpRequest connections per server to 6 (previous versions limit this to 2 per server). Some interactive web sites may keep an XMLHttpRequest connection open, so opening multiple sessions to such sites may result in the browser hanging in such a way that the window no longer repaints and controls don’t respond. This value can be changed by editing the network.http.max-persistent-connections-per-server preference in about:config.
  • From Gecko 7.0 headers set by setRequestHeader are sent with the request when following a redirect. Previously these headers would not be sent.
  • XMLHttpRequest is implemented in Gecko using the nsIXMLHttpRequest, nsIXMLHttpRequestEventTarget, and nsIJSXMLHttpRequest interfaces.
  • When a request reaches its timeout value, a «timeout» event is raised.

Events

onreadystatechange as a property of the XMLHttpRequest instance is supported in all browsers.

Since then, a number of additional event handlers were implemented in various browsers (onload, onerror, onprogress, etc.). These are supported in Firefox. In particular, see nsIXMLHttpRequestEventTarget and Using XMLHttpRequest.

More recent browsers, including Firefox, also support listening to the XMLHttpRequest events via standard addEventListener APIs in addition to setting on* properties to a handler function.

Permissions

When using System XHR via the mozSystem property, for example for Firefox OS apps, you need to be sure to add the systemXHR permission into your manifest file. System XHR can be used in privileged or certified apps.

"permissions": {
    "systemXHR":{}
}

Совместимость с браузерами

BCD tables only load in the browser

See also

User-1151851215 posted

Hello everybody 

We are using the ASP.Net AJAX Framework for http requests to our webservices.

Recently I got this error message out of the blue (Web application running and a window popping up): 

**************************************************************************

Microsoft JScript runtime error: ‘a._xmlHttpRequest.readyState’ is null or not an object 

**************************************************************************

When I debug with Visual Studio and draw object a to the watch list I see «a» is an object but with «a._xmlHttpRequest» i get :

a._xmlHttpRequest      —>  Variable uses an Automation type not supported in JScript              Error

and with «a._xmlHttpRequest.readyState»

a._xmlHttpRequest.readyState   —>  a._xmlHttpRequest.readyState’ is null or not an object                  Error

This is the source drawn out of MS AJAX code:

***************************************************************************** 

Sys.Net.XMLHttpExecutor=function()
{
Sys.Net.XMLHttpExecutor.initializeBase(this);
var a=this;
this._xmlHttpRequest=null;
this._webRequest=null;
this._responseAvailable=false;
this._timedOut=false;
this._timer=null;
this._aborted=false;
this._started=false;
this._onReadyStateChange=function()
{
  if(a._xmlHttpRequest.readyState===4)        <===== Here the error happens.
{
a._clearTimer();
a._responseAvailable=true;
a._webRequest.completed(Sys.EventArgs.Empty);
if(a._xmlHttpRequest!=null)
{
a._xmlHttpRequest.onreadystatechange=Function.emptyMethod;
a._xmlHttpRequest=null
}
}
};
this._clearTimer=function()
{
if(a._
…………..

 ***************************************************************************** 

 Is this a bug or a feature? Any ideas what can cause this?

Any tips are welcome. I still have the debugging session open.

Thanks

DeLurk 

Старый

24.02.2012, 15:29

Аспирант

Отправить личное сообщение для seregarem

Посмотреть профиль

Найти все сообщения от seregarem

 

Регистрация: 08.07.2010

Сообщений: 46

Ошибка только в IE

генерируется это:

<?xml version="1.0" encoding="utf8" standalone="yes"?><response><action>ok</action><kiosk><![CDATA[<tr>
<th class="table_header" width="70">№</th> <th class="table_header" width="160"> </th> <th class="table_header" width="160">Адрес</th> <th class="table_header" width="160">Стороны <img style="vertical-align: middle; margin-left: 20px;" src="images/side.png" alt="Ошибка xmlhttprequest есть null или не является объектом" /></th> <th class="table_header" width="390">Информация</th>
</tr><tr><td width="70" class="table_num1"><span class="num_kiosk">1</span></td><td width="160" class="table_l1"><img src="/uploads/Products/product_1/thumb_1_16.JPG" class="thumb" /></td><td width="160" class="table_l1">Октябрьский проспект, 16</td><td width="160" class="table_l1"><a class="fancybox" href="/uploads/Products/product_1/1_16.JPG"><img alt="Ошибка xmlhttprequest есть null или не является объектом" src="images/side_a_active.png" /></a><img src="images/side_b.png" /><img src="images/side_c.png" /><a class="fancybox" href="/uploads/Products/product_1/DSC07038.JPG"><img alt="Ошибка xmlhttprequest есть null или не является объектом" src="images/side_d_active.png" /></a><br /><br /><p style="color: #b80000;"><strong>просмотр фото</strong></p></td><td width="390" class="table_l1">Остановка, супермаркет «Глобус», крупный жилой район</td></tr><tr><td width="70" class="table_num1"><span class="num_kiosk">2</span></td><td width="160" class="table_l1"><img src="/uploads/Products/product_2/thumb_DSC04931.JPG" class="thumb" /></td><td width="160" class="table_l1">Профсоюзная, 78</td><td width="160" class="table_l1"><a class="fancybox" href="/uploads/Products/product_2/DSC04931.JPG"><img alt="Ошибка xmlhttprequest есть null или не является объектом" src="images/side_a_active.png" /></a><img src="images/side_b.png" /><img src="images/side_c.png" /><a class="fancybox" href="/uploads/Products/product_2/DSC04932.JPG"><img alt="Ошибка xmlhttprequest есть null или не является объектом" src="images/side_d_active.png" /></a><br /><br /><p style="color: #b80000;"><strong>просмотр фото</strong></p></td><td width="390" class="table_l1">Остановка, супермаркет «Глобус», крупный жилой район</td></tr><tr><td width="70" class="table_num1"><span class="num_kiosk">3</span></td><td width="160" class="table_l1"><img src="/uploads/Products/product_3/thumb_3__3-.JPG" class="thumb" /></td><td width="160" class="table_l1">Калинина, 3</td><td width="160" class="table_l1"><img src="images/side_a.png" /><img src="images/side_b.png" /><img src="images/side_c.png" /><a class="fancybox" href="/uploads/Products/product_3/3__3-.JPG"><img alt="Ошибка xmlhttprequest есть null или не является объектом" src="images/side_d_active.png" /></a><br /><br /><p style="color: #b80000;"><strong>просмотр фото</strong></p></td><td width="390" class="table_l1">Сеть магазинов «продуктовая лавка», магазин «1000 мелочей», парк цирка</td></tr><tr><td width="70" class="table_num1"><span class="num_kiosk">4</span></td><td width="160" class="table_l1"><img src="/uploads/Products/product_4/thumb_4_--.JPG" class="thumb" /></td><td width="160" class="table_l1">Перекресток Кольцова и Упита</td><td width="160" class="table_l1"><a class="fancybox" href="/uploads/Products/product_4/4_--.JPG"><img alt="Ошибка xmlhttprequest есть null или не является объектом" src="images/side_a_active.png" /></a><img src="images/side_b.png" /><img src="images/side_c.png" /><a class="fancybox" href="/uploads/Products/product_4/.___4.JPG"><img alt="Ошибка xmlhttprequest есть null или не является объектом" src="images/side_d_active.png" /></a><br /><br /><p style="color: #b80000;"><strong>просмотр фото</strong></p></td><td width="390" class="table_l1">Новый жилой район, ТЦ «Красная горка»</td></tr><tr><td width="70" class="table_num1"><span class="num_kiosk">5</span></td><td width="160" class="table_l1"><img src="/uploads/Products/product_5/thumb_5__60-.JPG" class="thumb" /></td><td width="160" class="table_l1">Октябрьский проспект, 60</td><td width="160" class="table_l1"><a class="fancybox" href="/uploads/Products/product_5/5__60-.JPG"><img alt="Ошибка xmlhttprequest есть null или не является объектом" src="images/side_a_active.png" /></a><img src="images/side_b.png" /><img src="images/side_c.png" /><a class="fancybox" href="/uploads/Products/product_5/_-_60.JPG"><img alt="Ошибка xmlhttprequest есть null или не является объектом" src="images/side_d_active.png" /></a><br /><br /><p style="color: #b80000;"><strong>просмотр фото</strong></p></td><td width="390" class="table_l1">Магазин «Принто», остановка, салон красоты</td></tr>]]></kiosk><pages><![CDATA[<div class="total_kiosk"><p>Всего 103 киосков</p></div><div class="links_kiosk"><div class="first_btn_address" onclick="getKiosk(0,'table_kirov','pages_kirov','Киров');"><p>‹‹ ‹‹</p></div><div class="btn_address" onclick="getKiosk(0,'table_kirov','pages_kirov','Киров');"><p>‹‹</p></div><div class="btn_address_active"><p id="activepage">1</p></div><div class="btn_address" onclick="getKiosk(1,'table_kirov','pages_kirov','Киров');"><p>2</p></div><div class="btn_address" onclick="getKiosk(2,'table_kirov','pages_kirov','Киров');"><p>3</p></div><div class="btn_address" onclick="getKiosk(1,'table_kirov','pages_kirov','Киров');"><p>››</p></div><div class="first_btn_address" onclick="getKiosk(20,'table_kirov','pages_kirov','Киров');"><p>›› ››</p></div></div>]]></pages></response>

Ответить с цитированием

Студворк — интернет-сервис помощи студентам

Всем доброго времени суток.

У меня возникла проблема при реализации скрипта, который делает запрос к MySQL, не обновляя страницу. Нашел пример реализации такого скрипта (http://www.webmascon.com/topic… es/13a.asp), написал подобный на локальном сервере, но при тестировании возникает ошибка.

Строка:21
Символ: 4
Ошибка: ‘response’ есть null или не является объектом

Соответственно, ни какого соединения и обновления данных на странице не происходит.

Помогите мне, пожалуйста. Я уже голову себе сломал %)

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

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Пример</title>
<script language="JavaScript" type="text/javascript">
function GetNewVars(name,text,date)
    {
    document.getElementById('name').innerHTML = name;
    document.getElementById('text').innerHTML = text; 
    document.getElementById('date').innerHTML = date; 
    };
    
function processReqChange() 
{
    if (req.readyState == 4) 
        {
        if (req.status == 200) 
            {
              response = req.responseXML.documentElement;
            method = response.getElementsByTagName('method')[0].firstChild.data;
              name = response.getElementsByTagName('name')[0].firstChild.data;
              text = response.getElementsByTagName('text')[0].firstChild.data;
            date = response.getElementsByTagName('date')[0].firstChild.data;
 
              eval(method + ' (name,text,date)');
            };
        };
};
 
function loadXMLDoc(url) 
{
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.onreadystatechange = processReqChange;
        req.open("GET", url, true);
        req.send(null);
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = processReqChange;
            req.open("GET", url, true);
            req.send();
        };
    };
};
 
function Timer()
    {
    Second--;
    document.getElementById('time').innerHTML = Second;
    if (Second == Update)
        {Update = Second - 10;
        id++;
        url  = 'http://localhost/js_test.php?id='+id;
        loadXMLDoc(url);
        };
    };    
 
Second = 60;
Update = Second - 10;
id = 1;
 
interval = setInterval(Timer,1000);
</script>
</head>
 
<body>
 
<div id='time'></div>
<div id='name'></div>
<div id='text'></div>
<div id='date'></div>
 
<script type="text/javascript">document.getElementById('time').innerHTML = Second;</script>
</body>
</html>

— это основной файл «test.php». Он формирует страницу и запускает таймер. через каждые 10 сек должен происходить запрос к «js_test.php», и забираться из MySQL очередная запись.
Код «js_test.php»:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php 
include("blocks/connect.php");
$id = $_GET["id"];
$id = trim($id);
$r_info = mysql_query("SELECT * FROM news WHERE id = $id LIMIT 1");
$m_info = mysql_fetch_array($r_info);
echo ('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>');
echo("<response>");
echo("<name>".$m_info["name"]."</name>");
echo("<text>".$m_info["text"]."</text>");
echo("<date>".$m_info["date"]."</date>");
echo("</response>");
            
?>

Но ни чего не происходит. IE выводит вышеприведенную ошибку через каждые 10 сек.
Очень рассчитываю на вашу помощь. Заранее благодарен.

Я разрабатываю страницу, которая извлекает изображения из Flickr и Panoramio через поддержку AJAX jQuery.

сторона Flickr работает нормально, но когда я пытаюсь $.get(url, callback) из Panoramio я вижу ошибку в консоли Chrome:

XMLHttpRequest не удается загрузить http://www.panoramio.com/wapi/data/get_photos?v=1&key=dummykey&tag=test&offset=0&length=20&callback=processImages&minx=-30&miny=0&maxx=0&maxy=150 — … Origin null не допускается Access-Control-Allow-Origin.

Если я запрашиваю этот URL из браузера напрямую, он работает нормально. Что происходит, и могу ли я обойти это? Я составляю свой запрос неправильно, или это то, что Panoramio делает, чтобы помешать тому, что я пытаюсь сделать?

Google не обнаружил никаких полезных матчей на сообщение об ошибке.

редактировать

вот пример кода, который показывает проблема:

$().ready(function () {
  var url = 'http://www.panoramio.com/wapi/data/get_photos?v=1&key=dummykey&tag=test&offset=0&length=20&callback=processImages&minx=-30&miny=0&maxx=0&maxy=150';

  $.get(url, function (jsonp) {
    var processImages = function (data) {
      alert('ok');
    };

    eval(jsonp);
  });
});

вы можете запустите пример в интернете.

Изменить 2

спасибо Дарину за его помощь в этом. ПРИВЕДЕННЫЙ ВЫШЕ КОД НЕВЕРЕН. используйте этот код:

$().ready(function () {
  var url = 'http://www.panoramio.com/wapi/data/get_photos?v=1&key=dummykey&tag=test&offset=0&length=20&minx=-30&miny=0&maxx=0&maxy=150&callback=?';

  $.get(url, function (data) {
    // can use 'data' in here...
  });
});

16 ответов


для протокола, насколько я могу судить, у вас было две проблемы:—18—>

  1. вы не передавали спецификатор типа «jsonp» вашему $.get, поэтому он использовал обычный XMLHttpRequest. Однако ваш браузер поддерживал CORS (общий доступ к ресурсам Cross-Origin), чтобы разрешить междоменный XMLHttpRequest, если сервер его использовал. Вот где пришла.

  2. я думаю, вы упомянули, что вы запускали его из файла: / / URL. Есть два способа для заголовков CORS сигнализировать, что междоменный XHR в порядке. Один-послать Access-Control-Allow-Origin: * (который, если вы достигли Flickr через $.get, Они, должно быть, делали), в то время как другой должен был Эхо назад содержимое Origin заголовок. Однако,file:// URLs производят null Origin который не может быть авторизован через echo-back.

первый был решен окольным путем предложением Дарина использовать $.getJSON. Это немного волшебство, чтобы изменить тип запроса от его значение по умолчанию «json «для» jsonp», если он видит подстроку callback=? в URL.

это решило второе, больше не пытаясь выполнить запрос CORS от file:// URL-адрес.

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

  1. если вы пытаетесь использовать JSONP, убедитесь, что один из следующих случаев:
    • вы используете $.get и set dataType в jsonp.
    • вы используете $.getJSON и включен callback=? в URL.
  2. если вы пытаетесь выполнить междоменный XMLHttpRequest через CORS…
    1. убедитесь, что вы тестируете через http://. Скрипты, запущенные через file:// имеют ограниченную поддержку CORS.
    2. убедитесь, что браузер фактически поддерживает CORS. (Opera и Internet Explorer опаздывают на вечеринку)

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

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

Подробнее кросс-доменный AJAX-ОУ, веб-служб (по-французски).


для простого HTML-проекта:

cd project
python -m SimpleHTTPServer 8000

выберите файл.


работает для меня на Google Chrome v5.0.375.127 (я получаю предупреждение):

$.get('http://www.panoramio.com/wapi/data/get_photos?v=1&key=dummykey&tag=test&offset=0&length=20&callback=?&minx=-30&miny=0&maxx=0&maxy=150',
function(json) {
    alert(json.photos[1].photoUrl);
});

также я бы рекомендовал вам использовать $.getJSON() метод вместо этого, как и предыдущий не работает на IE8 (по крайней мере на моей машине):

$.getJSON('http://www.panoramio.com/wapi/data/get_photos?v=1&key=dummykey&tag=test&offset=0&length=20&callback=?&minx=-30&miny=0&maxx=0&maxy=150', 
function(json) {
    alert(json.photos[1].photoUrl);
});

вы можете онлайн отсюда.


обновление:

теперь, когда вы показали свой код, я вижу с этим проблем. У вас есть как анонимная функция, так и встроенная функция, но оба будут называться processImages. Вот как работает поддержка JSONP jQuery. Обратите внимание, как я определяю callback=? чтобы вы могли использовать анонимную функцию. Вы можете прочитать больше об этом в документации.

еще одно замечание: вы не должны звонить эвалу. Параметр, переданный вашей анонимной функции, уже будет проанализирован в JSON с помощью jQuery.


пока запрашиваемый сервер поддерживает формат данных JSON, используйте интерфейс JSONP (JSON Padding). Это позволяет вам делать внешние доменные запросы без прокси-серверов или причудливых заголовков.



нам удалось это через http.conf файл (отредактирован и перезапущен службой HTTP):

<Directory "/home/the directory_where_your_serverside_pages_is">
    Header set Access-Control-Allow-Origin "*"
    AllowOverride all
    Order allow,deny
    Allow from all
</Directory>

на Header set Access-Control-Allow-Origin "*", вы можете поставить точный URL.


Если вы выполняете локальное тестирование или вызываете файл из чего-то вроде file:// тогда вам нужно отключить безопасность браузера.

на MAC:
open -a Google Chrome --args --disable-web-security


в моем случае тот же код отлично работал в Firefox, но не в Google Chrome. Консоль JavaScript Google Chrome сказала:

XMLHttpRequest cannot load http://www.xyz.com/getZipInfo.php?zip=11234. 
Origin http://xyz.com is not allowed by Access-Control-Allow-Origin.
Refused to get unsafe header "X-JSON"

мне пришлось удалить часть www URL Ajax, чтобы она правильно соответствовала исходному URL-адресу, и тогда она работала нормально.


Не все серверы поддерживают jsonp. Это требует, чтобы сервер установил функцию обратного вызова в его результатах. Я использую это, чтобы получить ответы json с сайтов, которые возвращают чистый json, но не поддерживают jsonp:

function AjaxFeed(){

    return $.ajax({
        url:            'http://somesite.com/somejsonfile.php',
        data:           {something: true},
        dataType:       'jsonp',

        /* Very important */
        contentType:    'application/json',
    });
}

function GetData() {
    AjaxFeed()

    /* Everything worked okay. Hooray */
    .done(function(data){
        return data;
    })

    /* Okay jQuery is stupid manually fix things */
    .fail(function(jqXHR) {

        /* Build HTML and update */
        var data = jQuery.parseJSON(jqXHR.responseText);

        return data;
    });
}

Я использую сервер Apache, поэтому я использовал модуль mod_proxy. Включить модули:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

потом добавил:

ProxyPass /your-proxy-url/ http://service-url:serviceport/

наконец, передайте прокси-url вашему скрипту.


в качестве заключительной ноты документация Mozilla явно говорит это

приведенный выше пример завершится ошибкой, если заголовок будет помечен как:
Access-Control-Allow-Origin: *. поскольку Access-Control-Allow-Origin явно упоминает http://foo.пример,
содержимое credential-cognizant возвращается в вызывающий веб
содержание.

Как следствие-это не просто плохая практика, чтобы использовать ‘*’. Просто делать не работать:)


Я также получил ту же ошибку в Chrome (я не проверяла другие браузеры). Это было из-за того, что я двигался дальше. domain.com вместо www.domain.com — … Немного странно ,но я мог бы решить проблему, добавив следующие строки.реврайт. Он перенаправляет domain.com к www.domain.com и проблема была решена. Я ленивый веб-посетитель, поэтому я почти никогда не печатаю www, но, по-видимому, в некоторых случаях это требуется.

RewriteEngine on
RewriteCond %{HTTP_HOST} ^domain.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/ [R=301,L]

убедитесь, что вы используете последнюю версию jQuery. Мы столкнулись с этой ошибкой для JQuery 1.10.2, и ошибка была решена после использования JQuery 1.11.1

0

автор: Ganesh Kamath — ‘Code Frenzy’


люди,

Я столкнулся с аналогичной проблемой. Но, используя Fiddler, я смог добраться до проблемы. Проблема в том, что URL-адрес клиента, настроенный в реализации CORS на стороне веб-API,не должен иметь косой черты. После отправки запроса через Google Chrome и проверьте TextView на заголовки раздел скрипача, сообщение об ошибке гласит что-то вроде этого:

*»указанное происхождение политики your_client_url:/’ является недопустимым. Он не может заканчиваться косой чертой.»

Это очень странно, потому что он работал без каких-либо проблем в Internet Explorer, но дал мне головную боль при тестировании с помощью Google Chrome.

Я удалил косую черту в коде CORS и перекомпилировал веб-API, и теперь API доступен через Chrome и Internet Explorer без каких-либо проблем. Пожалуйста, попробуй.

спасибо,
Энди!—1—>


в опубликованном решении есть небольшая проблема по CodeGroover выше, где, если вы измените файл, вам придется перезапустить сервер, чтобы фактически использовать обновленный файл (по крайней мере, в моем случае).

Так что поиск немного, я нашел этот использование:

sudo npm -g install simple-http-server # to install
nserver # to use

и тогда он будет служить в http://localhost:8000.


Возможно, вам также будет интересно:

  • Ошибка xml парсера строковый литерал не закрыт сбер корпорация
  • Ошибка xbox live 0x80072ee7
  • Ошибка xml parsing error not well formed
  • Ошибка xbox 8c15000c решение
  • Ошибка xbox 360 80070525 общий аккаунт

  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии