Ajax cross-domain solution

巴扎黑
Release: 2016-11-23 15:55:26
Original
1564 people have browsed it

Cross-domain POST

(function($){
window.isIE6=$.browser.msie && jQuery.browser.version==6.0;
jQuery.extend({
ajaxFormNums:0,
ajaxFormPost:function(sURL, datas, callBack,domains){/*[sURL=提交地址, datas=要提交的数据对像, callBack=回
调,domain=域]*/
domains=domains||'51.com';
var on='TEMP_POST_'+$.ajaxFormNums;
var of=[];
of.push(&#39;<div id="&#39;+on+&#39;_DIV" style="position:absolute;z-index:10;top:-20000100px;"><iframe 
id="&#39;+on+&#39;_IFRAME" name="&#39;+on+&#39;_IFRAME" height="1" width="1" src="http://friend.51.com/ajax_blank.php?d=&#39;+encodeURIComponent
(domains)+&#39;" frameborder="0" border="0" scrolling="no"></iframe><form id="&#39;+on+&#39;_FORM" name="&#39;+on+&#39;_FORM" method="post" 
action="&#39;+sURL+&#39;" target="&#39;+on+&#39;_IFRAME">&#39;);
$.each(datas,function(i,n){of.push(&#39;<textarea name="&#39;+i+&#39;" 
style="width:1px;height:1px;">&#39;+n+&#39;</textarea>&#39;);});
of.push(&#39;<input type="submit" value="Submit" name="b1" style="width:1px;height:1px;" /></form></div>&#39;);
$(document.body).append(of.join(&#39;&#39;))//.insertAdjacentHTML("beforeEnd", of.join(&#39;&#39;));
//document.body.insertAdjacentHTML("beforeEnd", of.join(&#39;&#39;));
of=null;
$(&#39;#&#39;+on+&#39;_IFRAME&#39;).bind(&#39;load&#39;,function(){
if(!$(this).attr(&#39;summary&#39;))
{
$(this).attr(&#39;summary&#39;,1);
$(&#39;#&#39;+on+&#39;_FORM&#39;).submit();
return false;
}
if(isIE6)
{
if($.isFunction(callBack))
{
callBack(window.name);
}
else
{
eval(callBack+&#39;(window.name)&#39;);
}
}
else
{
var oIf= this.id;
if($.isFunction(callBack))
{
if(navigator.userAgent.toLowerCase().indexOf(&#39;se 2.x&#39;)>-1)
{
callBack(frames[oIf].document.body.innerText);
}
else
{
callBack(frames[oIf].document.body.innerHTML);
}
}
else
{
eval(callBack+&#39;(frames[oIf].document.body.innerHTML)&#39;);
}
}
window.setTimeout(function(){$(&#39;#&#39;+on+&#39;_DIV&#39;).remove();},1);
});
$.ajaxFormNums++;
}
});
})(jQuery);
Copy after login

Call method:

$.ajaxFormPost(&#39;http://localhost/api.php?act=say&#39;, {cont:cont}, function(data){  
alert(data);  
});
Copy after login


Create a file ajax_blank.php in the root directory of the website
The content is:

<html><head><title>51.com</title><script type="text/javascript">document.domain="51.com";</script></head><body></body></html>
Copy after login

And add js to the calling page:

document.domain='51.com ';


php part

$result=-1;  
echo "<script>if(!/msie 6/i.test(navigator.userAgent)){document.domain=&#39;51.com&#39;;}else{parent.name=&#39;$result&#39;;}</script>$result";
Copy after login


Cross-domain GET

$.getJSON("http://localhost/api.php?callback=?",{receiver:receiver},function(data){  
alert(data.info);  
})
Copy after login


php processing part:

$ret[&#39;info&#39;] = iconv("GBK", "UTF-8", "不存在该用户");  
$result = json_encode($ret);  
echo request_check($_GET[&#39;callback&#39;]).&#39;(&#39;.$result.&#39;)&#39;;  
$_GET[&#39;callback&#39;]需处理一下,防止rss攻击  
function request_check($post){      
    if(!get_magic_quotes_gpc())    // 判断magic_quotes_gpc是否为打开      
    {  
        $post = addslashes($post);    // 进行magic_quotes_gpc没有打开的情况对提交数据的过滤      
    }      
    //$post = str_replace("_", "\_", $post);    // 把 &#39;_&#39;过滤掉      
    //$post = str_replace("%", "\%", $post);    // 把&#39; % &#39;过滤掉      
    $post = nl2br($post);    // 回车转换      
    $post= htmlspecialchars($post, ENT_QUOTES);    // html标记转换         
    return $post;  
}
Copy after login


ie6 jsonp return non-execution solution
Add in php return header

header(&#39;cache-control:no-cache;&#39;);  
header(&#39;Content-Encoding: plain&#39;);
Copy after login


In addition, add return false to the js trigger button; solve the ajax interruption problem under ie6
The data submitted by ajax is in utf8 format. PHP generally uses iconv("utf-8", "gbk//IGNORE", $str) or mb_convert_encoding($value, 'gbk', 'utf-8') to convert, and when encountering text with Mars, such as: ♡ Jingle Bell... Jingle Bell... Merry Christmas! ♡, the former will remove special characters, and the latter will turn special characters into question marks, so there is no need to perform encoding conversion when using the ajaxFormPost submission method


Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!