jq的$.get和$.post方法,都是不能跨域訪問的。$.getJson卻讓我們看到了希望的曙光,
不過有一點不足的是,這個是GET的方法,傳遞的參數是有限制的,最大不超過2083個字符。
但問題終有解決辦法的,經分析得出解決方案如下:
a.com使用$.getJson向b.com發送請求,在請求的同時,a.com把需要的傳遞的內容放到臨時文件中(或者membercache),
b.com收到請求,反過來向a.com請求需要的數據,進行必要的操作,再給a.com返回成功的信息。這樣就達到跨域大數據量請求的目的了。
當然通訊過程,最好加上協議,安全起見嘛。
JS 代碼:
- $.getJSON(target_url+"?jsoncallback=?",
- {
- 'userid': <?php echo $userid;?>
- },
- function(result) {
- if(result != 'sc'){
- alert(result);
- }else{
- top.document.getElementById("menu").src = $('#url_'+bid).val()+"admin/left_menu.php";
- top.document.getElementById("main").src = $('#url_'+bid).val()+"admin/index_body.php";
- }
- });
PHP服務端代碼:
- header('Content-Encoding: plain');
- $userid = SS($_REQUEST['userid']);
- //邏輯代碼
- $msg = sc;
- $json_str = json_encode(array($msg));
- echo $_REQUEST['jsoncallback'].'('.$json_str.')';
- exit;
header('Content-Encoding: plain');
這句非常重要,如果沒有這句,在IE6下將不能返回信息,導致回調函數無法執行。
另外在網上找到的說法,沒經驗證
<a href=”javascript:void(0);”></a> 做為提交按鈕也會導致 ie6下 $.getJSON出錯。
提交按鈕不能放置在<form>標簽里面,否則會form中斷了$.getJSON發出的http請求。