1

HTMLファイルからサーバーにデータを送信し、応答で出力を取得する必要があるphonegapアプリケーションを開発しています。保存サーバーにすべてのファイルがある場合、それらは機能します。ファイルをクライアントマシンとサーバーマシンに分割すると、それらは機能しません。私が理解している限り、それは CROSS DOMAIN POST REQUEST に関係しています。以下は私のコードです:

クライアント側: something.html

$(document).ready(function() {
$("#login").click(function(e){

 var formData = $("#loginForm").serialize();

 $.ajax({
        type: "POST",
        url: "http://testserver.bscheme.com/rss/login.php",
        crossDomain: true,
    cache: false,
        data: formData,
        success: function(txt){
            if(txt !=""){               
                    localStorage.setItem("background", txt);
                    //alert(localStorage.getItem("background"));
                    document.location.href="logged.html";
            }
            else
            alert("Badly Failed");          
            }
        });

        e.preventDefault();
    });   });

サーバー側: login.php

<?php

include('inc/db.php');

try
{
$userName       = mysql_real_escape_string($_POST['username']);
$passcode        = mysql_real_escape_string($_POST['passcode']);

if(empty($feedName)!="" && empty($feedUrl)!="") {

    $result = mysql_query("SELECT id,email,password FROM user WHERE email = '".$userName."'");
    $row = mysql_fetch_array($result);
    //echo $userName . $row['email'];
//  echo $passcode . $row['password'];
    if($row['email']== $userName && $row['password'] == $passcode && $row['email']!= "" && $row['password'] != "")  {
        echo $row['id'];

    }else{
        echo "fail";
    }
} else {
echo "All fields are mandatory!";
}
}
catch(Exception $e)
{
// normally we would log this error
echo $e->getMessage();
} 

CROSS DOMNAIN POST を許可するにはどうすればよいですか。サーバーの php ファイルを編集する必要があることはわかっています。次のコードを追加しましたが、どちらも機能しません。

switch ($_SERVER['HTTP_ORIGIN']) {
case 'http://localhost/rss': case 'https://localhost/':
header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']);
header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
header('Access-Control-Max-Age: 1000');
header('Access-Control-Allow-Headers: Content-Type');
break;
}

Firebug を使用して $.POST と言いますが、これは私が持っているということです

ResponseHeaders RequestHeaders Content-Type application/x-www-form-urlencoded; charset=UTF-8 受け入れる /

パラメータapplication/x-www-form-urlencoded passcode asd username qwe Source username=qwe&passcode=asd

応答

応答は常に空白です。すべてのhtmlとphpがローカルホストまたはテストサーバーにある場合に機能します。私のphpとjqueryのスキルにはatmが欠けているため、他の誰かがすでに質問したかどうかを理解するのが非常に難しいと感じています。繰り返して申し訳ありません. Ty for you help

4

1 に答える 1

1

私がしなければならなかった変更: クライアント側: something.html

$(document).ready(function() {
$("#login").click(function(e){      
    var formData = $("#loginForm").serialize();      

var username;
var passcode;
username= document.getElementById('username').value;
passcode = document.getElementById('passcode').value;



    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
        xmlhttp.onreadystatechange=function()
    {
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        var txt;
        txt=xmlhttp.responseText;
        //alert(txt);
        localStorage.setItem("background", txt);
        document.location.href="logged.html";
    }
}
xmlhttp.open("GET","http://testserver.bscheme.com/rss/login.php?username="+ username +"&passcode="+ passcode,true);
xmlhttp.send();

});




});   

サーバー上のファイルへの変更: Login.php

<?php


header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
header('Access-Control-Max-Age: 1000');
header('Access-Control-Allow-Headers: Content-Type');


include('inc/db.php');

try
{
$userName       = mysql_real_escape_string($_GET['username']);
$passcode        = mysql_real_escape_string($_GET['passcode']);

if(empty($feedName)!="" && empty($feedUrl)!="") {

    $result = mysql_query("SELECT id,email,password FROM user WHERE email = '".$userName."'");
    $row = mysql_fetch_array($result);
    //echo $userName . $row['email'];
//  echo $passcode . $row['password'];
    if($row['email']== $userName && $row['password'] == $passcode && $row['email']!= "" && $row['password'] != "")  {
        echo $row['id'];

    }else{
        echo "fail";
    }
} else {
echo "All fields are mandatory!";
}
}
catch(Exception $e)
{
// normally we would log this error
echo $e->getMessage();
}

私がしなければならなかったのは、サーバーがすべての種類のヘッダーを受け入れ、クライアントが XMLHttpRequest を送信し、$.Ajax(); の代わりに html 応答を返すことを確認することだけでした。

于 2013-05-31T09:53:19.050 に答える