NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: javascript GET httprequest s upravou hlavicky

V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
lubomir.tomecek:11.6.2015 9:12

Ahoj, snazim se napsat stranku, ktera bude stahovat JSON objekty z aplikacnoho serveru, upravi je a data z JSON zobrazi v mape.
Server ale z historickych duvodu pozaduje, aby byla v GET dotazu obsazena hlavicka USER s hodnotou. Pokud dam URL do prohlizece, tak je odpoved: "Chybí hlavička USER." Jestlize pouziji doplnek do prohlizece Poster a nebo Modify Headers nastavim si, ze GET dotazy maji odchazet s USER = "<hodnota>" vrati se mi JSON bez problemu.
Muzete mi prosim nekdo poradit nebo nasmerovat jak by takovy dotaz sel napsat v Javascriptu? Snazim se to vyresit uz nekolik dni, google mi zatim moc nepomohl.

Diky,
Luba

 
Odpovědět
11.6.2015 9:12
Avatar
lubomir.tomecek:11.6.2015 10:34

html:
<HTML>
<HEAD>
<script type="text/ja­vascript">
function getHttp(theUrl)
{
var request = new XMLHttpRequest();
request.open( "GET", theUrl, true );
request.setRe­questHeader( "USER", "service" );
request.send( null );
return request.respon­seText;
}
</script>
</HEAD>
<BODY>
<button onclick="getHttp('http:/­/localhost:9000/u­ser/id/1')">Click me</button>
</BODY>
</HTML>

Chyba:
XMLHttpRequest cannot load http://localhost:9000/user/id/1. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://local­host:8000' is therefore not allowed access. The response had HTTP status code 401.

CORS bych mel mit zadany spravne, ale obcas se objevuje, kdyz chybi cil pozadavku. SKutecna chyba bude asi HTTP status code 401 -> Unauthorized

Editováno 11.6.2015 10:34
 
Nahoru Odpovědět
11.6.2015 10:34
Avatar
Odpovídá na lubomir.tomecek
Drahomír Hanák:11.6.2015 13:36

Pokud vím, tak hodně prohlížečů na localhostu CORS blokuje. Musíš buďto v prohlížeči povolit tuhle možnost (například chrome jde spustit s flagou --disable-web-security), použít pro klienta i server stejný HTTP server nebo ty požadavky posílat přes nějakou proxy.

 
Nahoru Odpovědět
11.6.2015 13:36
Avatar
Odpovídá na Drahomír Hanák
lubomir.tomecek:11.6.2015 14:36

Diky za odpoved!
mam chrome Verze 43.0.2357.124 m pustil jsem ho chrome.exe --disable-web-security ale CORS zlobi porad:
XMLHttpRequest cannot load http://localhost:9000/user/id/1. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://local­host:8000' is therefore not allowed access. The response had HTTP status code 401.

Do hlavicky uz cpu i:
request.setRe­questHeader('Ac­cess-Control-Allow-Origin', '*');
request.setRe­questHeader('Ac­cess-Control-Allow-Methods', 'GET');

zkusim rozjet webovy server na IP adrese a do hosts zadat jmeno, aby to neslo pres localhost.

 
Nahoru Odpovědět
11.6.2015 14:36
Avatar
Odpovídá na lubomir.tomecek
Drahomír Hanák:11.6.2015 15:01

Teď jsem to zkoušel ve stejné verzi chromu a jde to i bez té flagy. Podle té chyby vůbec v odpovědi serveru nemáš Access-Control-Allow-Origin. Na serveru přidej k odpovědi hlavičku Access-Control-Allow-Origin: *

 
Nahoru Odpovědět
11.6.2015 15:01
Avatar
Odpovídá na Drahomír Hanák
lubomir.tomecek:11.6.2015 15:13

Pouzivam Apache 2.2 na win 7, v httpd.conf mam oddil:
DocumentRoot "C:\Users\UI570221\In­stall\Apache22\htdoc­s\app"

<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all
Header set Access-Control-Allow-Origin "*"
</Directory>

<Directory "/Apache22/htdoc­s/app">
AllowOverride None
Order allow,deny
Allow from all
Header set Access-Control-Allow-Origin "*"
</Directory>

uz nevim kam bych tu deklaraci vecpal..

Muzu samozrejme zkusit jiny webserver..

 
Nahoru Odpovědět
11.6.2015 15:13
Avatar
Odpovídá na lubomir.tomecek
lubomir.tomecek:11.6.2015 15:23

Ale podle chyby bude problem v tom, ze tu deklaraci musim mit na tom cilovem serveru a ne na tom odkud jde pozadavek, ze? Coz by vysvetlovalo me marne snazeni :-)
XMLHttpRequest cannot load http://10.42.18.64:9000/user/id/1. No 'Access-Control-Allow-Origin' header is present on the requested resource.

 
Nahoru Odpovědět
11.6.2015 15:23
Avatar
Milan Gallas
Tvůrce
Avatar
Odpovídá na Drahomír Hanák
Milan Gallas:10.11.2015 18:11

Ahoj. Mě to jede normálně, akorát mi to s daty pošle i celou šablonu webu(kód html). Nevíš jak se tomu dá zabránit, aby se to html neposílalo?

var app = angular.module('myApp', []);

app.controller('userCtrl', function($scope, $http){
    $scope.users =[];

    $http.get("http://projekt4.net/chat/get")
            .success(function (response) {$scope.users = response;})

            .error(function(){$scope.users= [];});
});

Odpověď vypadá takto:

{[{"name":"martin","id":12},{"name":"tomas","id":31},{"name":"nikola","id":34}]
<!DOCTYPE html....... hromada html, které nechci posílat.
 
Nahoru Odpovědět
10.11.2015 18:11
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.