2012-01-07 11 views
2

は、だから私は、これは共通の問題である知っているし、それについて話して多くの人々を見てきましたが、私の状況は一意であり、そうでないかもしれないと感じています他人として関わっている。クロスドメインの問題 - 簡単なPHPのページ

私は、ホストのウェブサイトを持っているし、JQやPhoneGapのでiPhoneアプリを構築しようとしています。

私は、人々が自分のスコアを自分のホームドメインに渡すことができるようにしたいと思っていますが、恐怖を感じています。 "Access-Control-Allow-OriginがOriginのnullを許可していません。 私がしようとすると、この呼び出し:この以来

$.ajax({ 
     type: "POST", 
     url: 'http://www.homesite.com/thephppage.php', 
     data: { 
      'guid': '12333-54', 
      'score': 52, 
      'initials': 'tod' 
     }, 
     success: function (data) { 
      try { 

       } 
       else { 

       } 
      } 
      catch (err) { 
       alert(err); 
      } 
     }, 
     error: function (xhr) { 
      alert(xhr.responseText); 
     } 
    }); 

は、私が所有するドメインに出て呼んでいるが、私はこの問題を是正するために行うことができます単純なものはありますか?

ありがとうございました。あなたは両方のドメインを所有しているという事実は、AJAXリクエストがクロスドメインすることができないという事実を変更しないこと T

答えて

0

WORKING! OH GLORY !!! (ソートの):ここでアヤックスが

代わりに使用で...私がやったことだ、私はJSONPルートを行ってきました(ソートの)と動的にそのように私の頭にタグを追加しました:

var head = document.getElementsByTagName('head')[0]; 
    script = document.createElement('script'); 
    script.type = 'text/javascript'; 
    script.src = 'http://thesite.co/thepage.php?var1=123&var2=432&var3='ttt'; 
    head.appendChild(script); 

私はPHPの側で(私が目標サイトを所有していることを知っているので)コールバックメソッドを与えなくても、PHP側でreturnNotをラップします。

$ encoded = json_encode($ json) ; echo "testMethod("。$ encoded。 ")"; これは私のダークiPhoneとiPadのシミュレータを除いて驚異的に機能しました! (実際のデバイスを購入する必要があるので...)実際のデバイスでこれが動作するかどうかはまだ分かりませんが、現在はChromeとSafariで動作しています...その電話機で動作させる方法!

皆様のご協力に感謝します!

==========第2のより優れたモバイルソリューション====================これはJSONP - dynamic Sc​​riptソリューションよりも優れています...

あなたのPhonegapとJQの下の頭に、このタグを挿入します。

<script type="text/javascript"> 
     $(document).bind("mobileinit", function() { 
      $.mobile.allowCrossDomainPages = true; 
     }); 
    </script> 

次に、XCODE ResourcesフォルダのPhonegap.plistファイルで、ドメインを外部ドメインに追加します。 phonegap.com。 (httpまたはwwwのままにしておきます)。

4

これは私の所有するドメインに呼び出されているので、この問題を解決するために簡単にできることはありますか?はい

では、これらのクロスドメインリクエストを作成できるようにする必要がありCORSを、設定を見てください。また、jQuery docsによれば、jQueryのCORS要求-ほとんど

xhrFieldsをサポートする必要が(1.5.1を添加)ネイティブXHRオブジェクトで を設定したfieldName、fieldValueのペアの地図の地図。たとえば、あなたが必要な場合は、クロスドメインリクエストに対してtrueに withCredentialsを設定するためにそれを使用することができます。

$ .ajax({url:a_cross_domain_url、xhrFields:{ withCredentials:true}}); jQueryの1.5で、withCredentialsプロパティが、それはこのフラグを無視する必要ネイティブXHRので、 CORSリクエストに伝播されませんでした。このような理由から、私たちは、あなたがそれを使用する必要がなければならないjQueryの1.5.1+を使用することをお勧めし 。現在


、により自動的に復号化、非空の文字列を返す .getResponseHeader( 'Content-Typeの')であるが、空の文字列を返す .getAllResponseHeaders()FirefoxのバグJSON CORSの回答 はFirefoxとjQueryではサポートされていません。

+0

異なるサイト間で変数を渡すことはありませんか?私はこれがまれなものだとは思わなかった。これを可能にするために私のサーバーに追加する必要があるものはありますか?それともブラウザの制限ですか? –

+0

@toddv - これを処理する最も一般的な方法は、プロキシを使用することです。同じドメイン上のプロキシにajax呼び出しを行い、必要な場所に呼び出しを行うと、プロキシはレスポンスを返信します。 –

+0

助けてくれてありがとう、アダム、本当に感謝しています...私はちょうど混乱しました。私は、最初のページと同じことをすることができるので、私のアプリで1ページを持つことの違いを理解していない。 (私は知っています...私はここで何かを逃しています)...悪いことを試みて、これについてもっと読んでください。 –

2

crossDomaintrueに変更する必要があります。

あなたのホームドメインにスコア登録を転送するホストのウェブサイト上でページを作ることができるアプリから別のドメインを呼び出す避けるためにjqueryのAJAX APIおよびオプション http://jqapi.com/#p=jQuery.ajax

2

をご確認ください。このページは、ホストのWebサイトで呼び出すことができます。

あなたは(ユーザの認証を含まない)例えばHttpRequest::send

を使用してデータを転送するためにPHPを使用することができます。

$url = 'http://mydomain.com/score.php'; 
$r = new HttpRequest($url, HttpRequest::METH_GET); 
$r->addQueryData(array('initials' => $initials, 'score' => $score)); 

try { 
    $json = $r->send()->getBody(); 
    // output the response to forward it to the app 
    echo $json; 
} catch (HttpException $ex) { 
    // handle error 
} 
+0

まあ私はユーザーの頭文字、そのスコアと私のドメインにappId ...だから何とか私はアプリからドメインにこれ​​を渡す必要がありますか? –

+0

私はあなたがiPhoneからアクセスされるサイトAを持っていることを理解しています。そしてある時点で、別のサイトBにAjaxコールを発信してハイスコアを登録したいとします。サイトBを呼び出す代わりに、サイトAを呼び出してサイトAにサイトBを呼び出させることができます。 –

+0

私はApp Aを持っています...そして、「RETをGETしてください! ...これをプッシュし、自分のウェブサイトBのPHPページに電話して、そのページに自分のスコアとイニシャルを送る(mydomain.com/score.php?initials=tev&score=12345のようなもの)... PHPページで、私は彼らのスコアを挿入し、すべてのプレイヤーの間で彼らのランクを伝えるJSONを送ります。 –