2012-05-04 7 views
12

ちょうどDartを試し始めたので、私は単純なHttpサーバーとクライアントを書くことにしました。私のサーバコード:ダーツを使用しているCORS、どのように動作させるのですか?

​​

私のクライアントコード:

#import('dart:html'); 
#import('dart:json'); 

class dartjson { 

    dartjson() { 
    } 

    void run() { 
    write("Hello World!"); 
    } 




    void fetchFeed(){ 
    XMLHttpRequest xhr = new XMLHttpRequest(); 
    var url = "http://127.0.0.1:8080/api"; 
    xhr.open("GET", url, true); 
    xhr.setRequestHeader('Content-Type', 'text/plain'); 
    //xhr.setRequestHeader('Access-Control-Request-Headers', 'http://127.0.0.1:3030'); 
    xhr.send(); 
    print(xhr.responseText); 
    document.query('#status').innerHTML = xhr.responseText; 

    } 



void main() { 
    new dartjson().fetchFeed(); 
} 

私はエラーを取得しておいてください。

XMLHttpRequest cannot load http://127.0.0.1:8080/api. Origin 
http://127.0.0.1:3030 is not allowed by Access-Control-Allow-Origin. 

私は私が間違ってやっていますか?

+1

これらの2つのリンクは見たことがありますか? http://blog.sethladd.com/2012/03/jsonp-with-dart.html https://groups.google.com/a/dartlang.org/group/misc/browse_thread/thread/e93a2b0e205bd5d1/605a7ef152f96e7b?lnk = gst&q = CORS#605a7ef152f96e7b – Gero

+0

'*'は 'Access-Control-Allow-Origin'以外は有効な値ではありません。要求がプリフライトされている場合は、原点フィールドに対しても有効ではありません( 'Access-Control-Request-Headers'行のコメントを外すとそうですが、あまり意味はありませんが、値はヘッダー名)。 – Tgr

+0

CORSは 'Access-Control-Allow-Origin'プロパティを使って作業しています。他の値を修正しても問題ありません。 – enyo

答えて

4

あなたは人生を簡素化し、同じホスト:ポートアドレスからサーバーとクライアントの両方のスクリプトを実行できます。静的なファイルを扱う小さなWebサーバーの例がhttp://www.dartlang.org/articles/io/#web-serversにあります。 '/ api'ハンドラを追加し、クライアントファイルが同じディレクトリにあることを確認してください。サンプルサーバーは、ポート3030で動作するDart Editor組み込みサーバーよりもかなり遅いです。

6

同じ問題が発生しました。以下は私のサーバーコードです。これは単にクエリパラメータを出力します。問題を解決するアクセス制御ヘッダーを追加しました。

HttpServer.bind('127.0.0.1', 8080).then((server){ 
    server.listen((HttpRequest request){  
     request.uri.queryParameters.forEach((param,val){ 
     print(param + '-' + val); 
     }); 

     request.response.headers.add("Access-Control-Allow-Origin", "*"); 
     request.response.headers.add("Access-Control-Allow-Methods", "POST,GET,DELETE,PUT,OPTIONS"); 

     request.response.statusCode = HttpStatus.OK; 
     request.response.write("Success!"); 
     request.response.close(); 
    }); 
    }); 

希望します。