2017-02-26 1 views
0

OSXアプリケーションで実行されるGCDWebServerからデータを受け取る次のjavascriptアプリケーションがあります。 anHttpRequest.responseTextが空である私はいつもanHttpRequest.readyState = 4とanHttpRequest.status = 0を得るGCDWebServerはresponseTextのないHTTPRequestステータスを返します

[webServer addDefaultHandlerForMethod:@"GET" 
          requestClass:[GCDWebServerRequest class] 
         asyncProcessBlock:^(GCDWebServerRequest* request, GCDWebServerCompletionBlock completionBlock) { 

          dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
           GCDWebServerDataResponse* response = [GCDWebServerDataResponse responseWithJSONObject:dict]; 
           completionBlock(response); 
          }); 

var HttpClient = function() { 
     this.get = function(aUrl, aCallback) { 
      var anHttpRequest = new XMLHttpRequest(); 
      anHttpRequest.open("GET", aUrl, true); 
      anHttpRequest.onreadystatechange = function() { 
       if (anHttpRequest.readyState == 4 && anHttpRequest.status == 200) { 
        aCallback(anHttpRequest.responseText); 
        document.write (anHttpRequest.responseText); 
        } 
        else { 
        document.write ("Not Ok: ReadyState=" + anHttpRequest.readyState + " Status= " + anHttpRequest.status); 
        } 
      }  
      anHttpRequest.send(null); 
     } 
    } 

    var client = new HttpClient(); 
    client.get('http://xxx.xxx.x.xx:8080?var=param', function(response) { 
     document.write ("Success"); 
    }); 

ココアアプリは、次のコードを実行します。

しかし、ブラウザを開いてhttp://xxx.xxx.x.xx:8080?var=paramと入力すると正しい結果が得られます。したがって、サーバーはデータを適切に送信しています。ここで

はGCDWebServer

[DEBUG] Did open connection on socket 13 
[DEBUG] Did connect 
[DEBUG] Connection received 312 bytes on socket 13 
[DEBUG] Connection on socket 13 preflighting request "GET /" with 312 bytes body 
[DEBUG] Connection on socket 13 processing request "GET /" with 312 bytes body 
[DEBUG] Connection sent 175 bytes on socket 13 
[DEBUG] Connection sent 107 bytes on socket 13 
[DEBUG] Did close connection on socket 13 
[VERBOSE] [xxx.xxx.x.xx:8080] xxx.xxx.x.xx:52401 200 "GET /" (312 | 282) 
[DEBUG] Did disconnect 

からのログは、任意のアイデアですか? ありがとうございます。

答えて

1

これはGCDWebServerの問題ではなく、単にCORSの問題です。あなたがcurlのようなものからあなたのサーバーに対して同じ要求をした場合、正しい200のHTTPステータスが表示されます。これは、それは、開始サーバーからJavaScriptに取得フル応答を返すため許可されているブラウザに指示

Access-Control-Allow-Origin: * 

:ブラウザから正しい応答を取得するには、サーバーには、以下のヘッダを送信されている必要がありますリクエスト。このレスポンスヘッダがなければ、ブラウザは基本的に受信したすべてのデータを削除し、ブラウザのコンソールにエラーメッセージを表示する必要があります。

+0

ありがとうございます。出来た。私はちょうど [応答setValue:@ "*" forAdditionalHeader:@ "Access-Control-Allow-Origin"]を追加しなければなりませんでした。 GCDWebServerDataResponse *応答の後で、completionBlock(応答)の前。 –

関連する問題