2015-07-22 3 views
0

Я пытаюсь получить результат некоторого XMLHttpRequest Дженкинса сервераJavascript получить JSON результат XMLHttpRequest

var oReq = new XMLHttpRequest(); 
var res = oReq.open("get", "http://" + IP + ":8080/job/Job1/lastBuild/api/json?depth=1", true); 
oReq.send(); 

Я не получаю вход в var res однако, почему это?

EDIT

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

No 'Access-Control-Allow-Origin' header is present on the requested resource. 

Что это значит?

Благодаря

+0

возможно дубликат [Как получить ответ XMLHttpRequest?] (Http://stackoverflow.com/questions/3038901/how-to-get-the-response-of- xmlhttprequest) – haim770

+0

Прочитайте документацию по объекту XMLHttpRequest. – epascarello

ответ

0

open не возвращает ничего, проверьте API reference on MDN. Поскольку вы делаете асинхронный запрос, отправив третий аргумент как true, он не завершится сразу после send(). Я бы рекомендовал прочитать this guide о том, как использовать XMLHttpRequest.

1

1) Использовать jquery. Это поможет вам с большим количеством вещей!

$.getJSON("http://" + IP + ":8080/job/Job1/lastBuild/api/json?depth=1", function(data) { 
    //data contains full parsed JavaScript object of json 
}); 

2) Access-Control-Allow-Origin позволяет браузера для чтения информации из другого происхождения, бур здесь лучше answer

+0

Получение заголовка «Нет» Access-Control-Allow-Origin »присутствует в запрошенном ресурсе». – user829174

+0

Я отредактировал свой ответ – schnawel007

1

Это лучше использовать JQuery в $ .getJSON, $ .ajax, $ .get и т.д.

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

// returns proper XMLHttpRequest object 
 
    function getXmlHttp(){ 
 
     var xmlhttp; 
 
     try { 
 
     xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); 
 
     } catch (e) { 
 
     try { 
 
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
 
     } catch (E) { 
 
      xmlhttp = false; 
 
     } 
 
     } 
 
     if (!xmlhttp && typeof XMLHttpRequest!='undefined') { 
 
     xmlhttp = new XMLHttpRequest(); 
 
     } 
 
     return xmlhttp; 
 
    } 
 

 
    // creates CORS Request object 
 
    function createCORSRequest(method, url) { 
 
     var xhr = getXmlHttp(); 
 
     if ("withCredentials" in xhr) { 
 
     xhr.open(method, url, true); 
 
     } else if (typeof XDomainRequest != "undefined") { 
 
     xhr = new XDomainRequest(); 
 
     xhr.open(method, url); 
 
     } else { 
 
     xhr = null; 
 
     } 
 
     return xhr; 
 
    } 
 
    
 
    // does request and calls callback function and passes json data to callback function 
 
    function getJson(url, callback) { 
 
     var request = createCORSRequest('GET', url); 
 
     if(!request) { 
 
     console.log('Cannot create request'); 
 
     return false; 
 
     } 
 

 
     request.onload = function() { 
 
     var data = JSON.parse(request.responseText); 
 
     callback(data); 
 
     }; 
 

 
     request.onerror = function() { 
 
     console.log('Error happen'); 
 
     }; 
 

 
     request.send(null); 
 
    } 
 
    
 
    // usage 
 
    //var url = "http://" + IP + ":8080/job/Job1/lastBuild/api/json?depth=1"; 
 
    var url = 'http://time.jsontest.com/?alloworigin=true'; 
 
    getJson(url, function(data) { 
 
     alert(data.time); 
 
     console.log(data); 
 
    });


О CORS: http://www.html5rocks.com/en/tutorials/cors/

Кроме того: там должны быть определены правила доступа о CORS в веб-сервере с IP, который вы запрашиваете.
об этом читайте здесь: http://enable-cors.org/server_nginx.html, http://enable-cors.org/server_apache.html



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

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

в RoR: https://gist.github.com/dhoelzgen/cd7126b8652229d32eb4

+0

Получение заголовка «Нет» Access-Control-Allow-Origin »присутствует на запрошенном ресурсе. ' – user829174

+0

wait, я обновляю код – num8er

+0

проверить мой код (: – num8er

0

Вы можете просто установить xhr.responseType = 'json'; и response будет JSON.

const xhr = new XMLHttpRequest(); 
 
xhr.open('GET', 'http://echo.jsontest.com/insert-key-here/insert-value-here/key/value'); 
 
xhr.responseType = 'json'; 
 
xhr.onload = function(e) { 
 
    if (this.status == 200) { 
 
    console.log('response', this.response); // JSON response 
 
    } 
 
}; 
 
xhr.send(); 
 

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