0

イントラネット上に複数のサーバーがあります。あるサーバーから別のサーバーで処理するデータを渡しています。ajax を使用しようとしていますが、初心者です。

<script type="text/javascript" src="jquery-1.8.0.js"></script>
<script type="text/javascript">
function print(oForm){

var toggle = oForm.elements["toggle"].value;
var ticket_type_id = oForm.elements["ticket_type_id"].value;
var printer_id = oForm.elements["printer_id"].value;
var store_id = oForm.elements["store_id"].value;
var data = oForm.elements["data"].value;

var dataString = "toggle="+ toggle+ "&ticket_type_id="+ ticket_type_id+ "&printer_id="+ printer_id+ "&store_id="+ store_id+ "&data="+ data;
$.ajax(
{
type:"POST", 
url:"http://192.168.12.103/crowncontrol/backend/processes/print.php", 
data:dataString,
success: function(data){
alert("successful");
}
}
);
}
</script>

上記の URL は機能しません。しかし、私がURLを作ると:

"../../../backend/processes/print.php"

これは同じ場所で、正常に動作します。また、Anchor Get 経由で送信すると、正常に動作します。

href="http://192.168.12.103/crowncontrol/backend/processes/print.php?etc"

私が ajax を使用している理由は、ユーザーに気付かれずに print.php スクリプトを実行したいからです。url:"../../../backend/processes/print.php" を使用できない理由は、イントラネット上のあるサーバーから別のサーバーに情報を送信するためです。

どんな助けでも大歓迎です。私は自分でそれを機能させるためにあまりにも長い時間を費やしてきました。

私が使用したajaxコード全体ではなく、以下の回答からのヘルプの後:

$.getJSON('http://192.168.12.103/crowncontrol/backend/processes/print.php?callback=?',dataString,function(res){
    //alert('Success');
});

また:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" type="text/javascript">
4

2 に答える 2

0

この問題に対処する簡単な方法は、サーバーでスクリプトファイルを作成し、そのサーバー要求を介して要求をルーティングすることです。

以下のロジックを使用してください。

  1. クロスドメインに対して直接AJAXリクエストを行う代わりに、サーバー上の新しいスクリプトに対してAJAXリクエストを行います。
  2. そのスクリプトファイルで、リクエストを取得し、(そのクロスドメインアドレスに)必要な呼び出しを行います。
  3. 次に、クロスドメインサーバーから応答を受信し、クライアントに送信します。
  4. データを必要とする自分のサーバーから結果を受け取ります。

この図は次のことを示しています。

ここに画像の説明を入力してください

于 2012-09-02T06:21:53.607 に答える
0

これは、同一オリジン ポリシーの結果です。セキュリティ上の理由から、通常の AJAX リクエスト クロスドメイン リクエストを実行することはできません (同一オリジン ポリシーに関するリンクを参照してください)。

幸いなことに、jQuery には、XMLHttpRequest の代わりにスクリプト タグ インジェクションを使用する JSONP リクエスト サポートが含まれています。

xhr オブジェクト (ajax の方法である XMLHttpRequest) を作成して使用する代わりに、URL に設定された src 属性を持つスクリプト タグを作成します。それはうまくいくはずです。

コードを次のように変更してみてください:

    $.ajax(
{
type:"POST", 
url:"http://192.168.12.103/crowncontrol/backend/processes/print.php?callback=?", 
data:dataString,
success: function(data){
alert("successful");
}
}
);

( ?callback=? の部分に注意してください)

これはjQueryのjsonpチュートリアルです

jsonpに関する情報と、同一オリジン ポリシーに関する情報を次に示します。

于 2012-09-02T06:05:23.140 に答える