10

jquery post関数でかなりイライラする問題が発生しています。これは、正しく機能する方法を理解していないことが原因である可能性があります。

私が書いたphpスクリプトにフォーム情報を投稿する関数があり、そのスクリプトはAPIに対してcurlリクエストを実行して、javascriptのクロスドメインポリシーを回避します。「http」に送信する限りは問題なく動作するようですが、「https」に送信するとフォームが送信されません。

コンピューターでwiresharkを実行しましたが、URLにhttpを使用させるまで、宛先IPへのトラフィックは表示されませんでした。サーバーに基本認証があるので、URLを介してユーザーとパスワードを渡しますが、それなしでテストしたところ、同じ結果が得られました。

動作しないコードは次のとおりです。

$j.post("https://<api user>:<password>@<ip>:444/ProxyScript.php", 
         $j("#spoke_ticket").serialize(),
         function(msg) { 
              log_status(msg);
              fade_status();
              $j(':input','#createtheticket')
                   .not(':button, :submit, :reset, :hidden')
                   .val('')
                   .removeAttr('checked')
                   .removeAttr('selected');
               });

仕事関数は次のとおりです。

$j.post("http://<other ip>/ProxyScript.php",  
        $j("#spoke_ticket").serialize(),
        function(msg) { 
              log_status(msg);
              fade_status();
              $j(':input','#createtheticket')
                   .not(':button, :submit, :reset, :hidden')
                   .val('')
                   .removeAttr('checked')
                   .removeAttr('selected');
               });

トラフィックが送信されない理由について何かアイデアはありますか?重要な情報などを省略した場合はお知らせください。

助けてくれてありがとう

4

2 に答える 2

2

httpページからhttpsURLにAJAX投稿を行う場合、ここで説明するように、プロトコルもオリジン仕様の一部であるため、クロスドメインポリシーが開始されます。ブラウザはAJAX呼び出しを行うことを拒否するため、トラフィックは表示されません。

ここで解決策について説明します。

httpページでhttpsを使用するAjax

したがって、最善の策はAccess-Control-Allow-Originヘッダーです。これは、現在ほとんどの最新のブラウザーでサポートされているはずです。

したがって、サーバーに次のヘッダーを応答に追加させます。

Access-Control-Allow-Origin: https://www.mysite.com

何らかの理由でこれを強制できない場合、残っている唯一の選択肢はJSONPです。

于 2012-10-17T21:06:08.777 に答える
0

クロスドメインの問題を解決するためにプロキシを使用してみませんか?もっと簡単に聞こえます。簡単な例は、郡や道路名などのデンマーク政府の全国地理データを取得したい場合です(幸運なことに、それらのデータはjsonまたはXMLオプションです)

簡略化されたproxy.php

<?
header('Content-type: application/json');
$url=$_GET['url'];
$html=file_get_contents($url);
echo $html;
?>

ajaxで、郡の境界線の緯度/経度を取得します

var url= "proxy.php?url=https://geo.oiorest.dk/"+type+"/"+nr+"/graense.json";           
$.ajax({
  url: url,
  dataType: 'json',
  success:  function (data) {
   ...

}); 

httpsに注意してください-URLは、実際の例、https: //geo.oiorest.dk/kommuner/0810/graense.jsonである可能性があります

于 2012-10-17T21:39:49.290 に答える