0

そのため、XMLHTTPRequestを使用してログイン要求を完了するための外部スクリプトを取得しようとしています。

私が得ているエラーは、XMLHttpRequestがhttp:///.phpをロードできないことです。Origin http:// *は、Access-Control-Allow-Originでは許可されていません。

今、私はこの投稿にかなり精通しています: XmlHttpRequestエラー:OriginnullはAccess-Control-Allow-Originで許可されていません

そして、私が理解していることから、JSONPオブジェクトとしてリクエストする必要があります。それに関する問題は、私がXMLHTTPRequestを使用していて、jQueryライブラリを使用してそれを行うことができないことです。

スクリプトを実行しようとしているhtmlページのコードは次のとおりです。

<html>
<head>
<meta http-equiv="Access-Control-Allow-Origin" content="*">
<script language = "javascript" type="text/javascript" src="jquery-1.7.2.js">
</script>
<script language = "javascript" type="text/javascript" src="main.js">
</script>
<script type="text/javascript">
function show_prompt()
  {
    var name=prompt("User Name");
    var password =prompt("Password"); 
    var loginWorked = false;
    if (name!=null && name!="") loginWorked = init(name,password);
if(loginWorked == true){
    window.location = "Toolbar.html"
}
}
</script>
</head>
<body>
<input type="button" onclick="show_prompt()" value="Login" />
</body>
</html>

そして私のメインファイルからのコード:

init関数:

function init(username,password){
    //Initializes the toolbar.

init.user = username;
init.pass = password;
init.pass_hashed = sha256(init.pass);
var key = fetchKey(username);
init.pass_hashed += key;
init.pass_hashed = sha256(init.pass_hashed);
var loginParams = "login=1&pwd=" + init.pass_hashed + "&uname=" + init.user + "&LastKey=" + getKey();
loginReqReturn = send_request("http://data.nova-initia.com/login2.php","POST", loginParams);
if(loginReqReturn.responseText != "Error: Login Incorrect "){
    return true;
}
else return false;  

}

そして、sendRequestメソッド:

function send_request(theURL, theMethod, theParams)
{
var theReq = new XMLHttpRequest();
theReq.overrideMimeType("application/json");
theReq.open(theMethod,theURL,false);
if(typeof(theParams) === "string")
{
    theReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
}
else
{
    theReq.setRequestHeader("Content-type", "application/json");
    theParams = JSON.stringify(theParams);
}
if(_key) theReq.setRequestHeader("X-NOVA-INITIA-LASTKEY", _key);
if(theParams)
{
    theReq.send(theParams);
}
setKey(theReq);
return theReq;

}

最も効率的なコードではありませんが、少なくともHTML以外のコンテキストで実行すると機能します(Google Chromeのツールバーで作業していますが、機能するにはhtmlオーバーレイが必要です)。どんな助けでも大歓迎です。

4

2 に答える 2

0

これがGoogle Chrome 拡張機能の場合、拡張機能のマニフェスト内でクロスオリジンXMLHttpRequestリクエストのアクセス許可をリクエストできます。

{
  ...
  "permissions": [
    "http://data.nova-initia.com/"
  ],
  ...
}
于 2012-04-18T22:46:29.730 に答える
0

あなたの正確な質問が何であるかはわかりませんが、JSONP を使用することが jQuery を使用せずに実行できるソリューションであることがわかっている場合。仕組みは次のとおりです。 http://en.wikipedia.org/wiki/JSONP

于 2012-04-18T22:14:00.930 に答える