1

node.js で HTTP サーバーを作成しました

var http = require('http');
http.createServer(function (request, response) {
  response.writeHead(200, {'Content-Type': 'text/plain'});
  response.end('Hello World ' + request.url + '\n\n');
  console.log(request.url);
}).listen(8124);
console.log('Server running at http://127.0.0.1:8124/');

これは、phonegap / cordova アプリからのリクエストを処理する必要があります。

function testnodejs() {
    xmlHttp=GetXmlHttpObject()
    if (xmlHttp==null)  {
        alert ("Your webbrowser does not support HTTP Request");
        return;
    }
    var url="http://domain.com:8124/i.t?hi=hi!";
    console.log(url);
    document.getElementById("maindiv").innerHTML = "<div id='itembrd' onClick=\"testnodejs();\"><div id='item'>Nodetest</div></div>";
    xmlHttp.open("GET", url, true)
xmlHttp.onreadystatechange=function() {
        document.getElementById("maindiv").innerHTML += xmlHttp.status + " ";
        if (xmlHttp.readyState==4) {
            console.log(xmlHttp.responseText);
            document.getElementById("maindiv").innerHTML += xmlHttp.responseText + '<br />\n';
        }
    }
    xmlHttp.send(null)
}

config.xml には

<access origin=".*" />

リクエストは readyState 4 を返しますが、200 が予想される場合でもステータス 0 を返します。

4

1 に答える 1

3

それで、私はこれを数日間脇に置きました。新たに放棄して戻ってきて、それを修正しました。問題は、200ではなく0を返すnode.jsサーバー側にありました。これは、オリジンを許可するためです。このように応答ヘッダーを書き直しました。

response.writeHead(200, {
    'Content-Type': 'text/plain',
    'Access-Control-Allow-Origin' : '*'
});

そして出来上がり!タンゴ!

これで、cordova/phonegapアプリ内からのXHRリクエストに対する非常に軽量なソリューションができました。

于 2012-09-03T08:39:52.920 に答える