Jquery クロスドメイン リクエストの PHP データについて

WBOY
リリース: 2016-06-23 13:43:45
オリジナル
876 人が閲覧しました

ajax がクロスドメインリクエストを実行できない問題の原因は何ですか?

ajax 自体は、実際には XMLHttpRequest オブジェクトを通じてデータとやり取りしますが、セキュリティ上の理由から、ブラウザーは js コードのクロスドメイン操作を許可していないため、警告が発行されます。 クロスドメイン セキュリティ制限はブラウザ側を指しますが、サーバー側にはクロスドメイン セキュリティ制限はありません。したがって、これら 2 つの状況に対して 2 種類のクロスドメイン ソリューションが導出されています。1 つはプロキシ方式に似たサーバー側の中継で、もう 1 つはブラウザ側で実際のクロスドメイン アクセスを処理する js です。

<script type="text/javascript" src="./jquery-1.6.4.min.js"></script>  <script type="text/javascript">      function short(){          var url_long=$("#url_long").val();          var source=$("#source").val();          var request = "http://api.t.sina.com.cn/short_url/shorten.json?url_long="+url_long+"&source="+source+"&callback=?";          //&callback=? 必须加上,myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。jquery api 文档上有说明。          $.ajax({              dataType: "jsonp",//跨域访问 dataType 必须是jsonp 类型。              url: request,              type:"GET",              jsonp:"callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)            jsonpCallback:"flightHandler",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据            success: function(response) {                  $("#shortUrl").html("短地址为:"+response[0].url_short);              },               error: function(XMLHttpRequest, textStatus, errorThrown) {                  alert("status"+XMLHttpRequest.status);                  alert("readyState"+XMLHttpRequest.readyState);                  alert("textstatus"+textStatus);                  alert(errorThrown);              }          });          return false;      }      </script>  });
ログイン後にコピー

php バックエンド:

ult = json_encode(array($data));echo "flightHandler($result)";//此处的flightHandler是上面$ajax中jsonpCallback定义的名称,由于jquery已经封装好了jsonp可以直接拿去用。//当使用jsonp时,使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。//有人建议此处的函数名称可以弄成动态获取的,为了实现不同的操作代码范例:$method = isset($_GET[‘method’])?trim($_GET[‘method’]):’flightHandler’;//获取方法名称$result = json_encode(array($data));echo $method ."($result)";
ログイン後にコピー

または

 print_r($_GET['callback'] . '(' . urldecode(json_encode($rs_info_arr)) . ')');
ログイン後にコピー

2 つの点に注意してください:
1. データ型は追加する必要がありますが、追加する必要はありません。最初は成功:関数が応答しませんでした (データが返されました)。
3.charset="utf-8" は utf-8 であり、ファイルの保存形式もエンコード utf-8 である必要があります。


フォーム送信を使用する場合、クロスドメインの問題を考慮する必要はありません。

れーい

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート