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 である必要があります。
フォーム送信を使用する場合、クロスドメインの問題を考慮する必要はありません。