2010-12-06 10 views
0

私はフォームとすべてを1つのドメイン(ドメインAと呼ぶ)とPHPファイルを別のドメイン(ドメインB)に持つ単純なログインシステムを作成しようとしています。どうして?単にドメインAがより信頼できるものの、PHPをサポートしていないためです。私はこのAJAXのすべてには全く新しいので、私は現在オンラインで見つかったリソースを使用しています。JqueryクロスドメインAJAXとPHPとの通信

jQueryとドメインAにそれの一部を構成する以下の通りです:代わりに、姓と名の名前と電子メールを表現しようとしている

<form id="submit" method="post"> 
<fieldset> 
<legend>Enter Information</legend> 

<label for="fname">Name:</label> 
<input class="text" id="fname" name="fname" size="20" type="text" /> 

<label for="lname">Email:</label> 
<input class="text" id="lname" name="lname" size="20" type="text" /> 

<button class="button positive"> Submit </button> </fieldset> 
</form> 
<script> 
$(document).ready(function(){ 
    $("form#submit").submit(function() { 
    // we want to store the values from the form input box, then send via ajax below 
    var fname  = $('#fname').attr('value'); 
    var lname  = $('#lname').attr('value'); 
     $.ajax({ 
      type: "POST", 
      url: "http://domainB.com/somefolder/ajax.php", 
      data: "fname="+ fname +"& lname="+ lname, 
      success: function(){ 
       $('form#submit').hide(function(){$('div.success').fadeIn();}); 

      } 
     }); 
    return false; 
    }); 
}); 
</script> 

その「LNAME」に注意してくださいと「fnameに」それぞれ、

ドメインB上のPHPコード:

<?php 

    // CLIENT INFORMATION 
    $uname  = htmlspecialchars(trim($_POST['fname'])); 
    $umail  = htmlspecialchars(trim($_POST['lname'])); 
    $uip = 12345; 
    $usecret = "secret"; 
//Mysql 
$con = mysql_connect("mysql.domainB.com","username","password"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 
//Connect 
mysql_select_db("login_db", $con); 
//Insert user details irrespective of whether the user is a member or not to make a log kind of thing 
mysql_query("INSERT INTO log_data (Name, Email, IP_ADDRESS, Secret) 
VALUES ('$uname', '$umail', '$uip', '$usecret')"); 

//Now check if the user is a subscriber or not 


// mysql_query("SELECT Email, Secret FROM login_data WHERE Email='$umail' AND Secret="secret""); 
//I don't know the code to check if the user has logged in correctly 
//This is where I need you to help me 
//I need to check if the user has logged in correctly, if yes, then return a message saying //success which should be caught by Jquery and displayed as an Alert, or something 
//If the user login failed, this php code should return a failure message which again should be caught by Jquery on Domain A and displayed as an alert in the least. 


mysql_close($con); 
//end Mysql 

?> 

物事がここで注意すべき - login_db内部の二つのテーブルがありますデータベース - log_dataログ情報とlogin_dataを格納しますユーザー名とパスワードを格納します。変数$ secretにはユーザーのパスワードが格納されます。

log_dataの挿入はチャームのように機能しますが、私に迷惑をかけているlogin_dataのように機能します。どんな助けでも大歓迎です。ありがとう!

あなたはsame origin policyによるクロスドメインAJAXを行うことはできません

+0

@imaginonicは、jquery ajaxのphp working idependentです。ただ1つはphpを実行してeを見てください非常にうまく動作しています – kobe

+0

@ gov - 返信のために、最初のクエリ(挿入)は本当にうまく動作します、私はちょうど選択クエリ(2番目のクエリ)を取得する必要があります。ありがとう – dsignr

+0

@imaginonic、あなたの挿入が動作している場合は、そのクロスドメインの問題ではない、あなたの選択queryuですか? – kobe

答えて

0

ちょうど以下のコードをしようとして与えるJSONP

+0

ありがとう、私もPHPを修正する必要がありますか?私のPHPでは、どこでもJSONエンコードを使用していないためです。感謝万円。 Imag – dsignr

+0

@imagionoic、私はPHPについてよくわかりませんが、文字列を作成してjsonp表記に変換してUIに送信する必要があります。その{}と[]を使用してjsopオブジェクトを構築する必要があります。 – kobe

+0

@imagionoic、この例を見て、彼は手動で構築された文字列をjqueryに送り返す方法を示しました。残念ながら私は.netの人であり、あまり役に立たなかったhttp://lnx.shortcutto701.com/2010/12/ 05/cross-domain-ajax-request-jquery-jsonp-aspnet/ – kobe

0

IMAG。

jsonpクロスドメインを行うことができます。彼女の方法はJQuery:docsです。

$.ajax({ 
      url: url, 
      async: true, 
      type: "GET", 
      dataType: "jsonp", 
      success: function(json){ 
       // handle success response here 
      }, 
      error: function(){ alert("x.err"); } 
     }); 
+0

@larry k、あなたは正しいと思います..// – kobe

+0

私はJqueryページにエラーメッセージを返すことはできませんか? if(function login failed)のようなものはエラーを返します。 ??(文法は気にしないでください) – dsignr

+0

@imaginonic、firebugはあなたにある程度のことを教えてくれますが、自分の例外を書いて、戻り値の文字列またはjsonpオブジェクトの一部としてUIにステータスを送る必要があるのを見たい場合は.. 。 – kobe

0

あなたはデータ型を使用する必要があります...それはまた

var dataString = "fName=" + $('#fname').attr('value') + "&lname=" + $('#lname').attr('value'); 
       var url = "http://demo/exampe.php?" + dataString; 


       $.getJSON(url + "&jsoncallback=?", function(data){ 

       alert("success"); 

JSONPオブジェクトの構築は以下のようにする必要があり、クロスドメインの問題の世話をする必要があります。

{"menu": { 
    "id": "file", 
    "value": "File", 
    "popup": { 
    "menuitem": [ 
     {"value": "New", "onclick": "CreateNewDoc()"}, 
     {"value": "Open", "onclick": "OpenDoc()"}, 
     {"value": "Close", "onclick": "CloseDoc()"} 
    ] 
    } 
}} 



       }); 
+0

ありがとうございます。上記のコードでどのように実装すればよいかを教えていただければ幸いです。つまり、ユーザー名とパスワードをJSONとして解析し、コードを使用してPHPサーバーから応答を取得する方法がわかりません。ありがとう – dsignr

+0

まず、あなたのPHPからのレスポンスヘッダーを作成する必要があります:Content-Type \t application/json、通常のようにレスポンス(json形式)をエコーし​​てからjsonを使ってjsonのデータにアクセスできます。 var id = menu.id – AnD