Home  >  Article  >  Backend Development  >  Ajax cross-domain solution

Ajax cross-domain solution

巴扎黑
巴扎黑Original
2016-11-23 15:55:261587browse

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);

Call method:

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


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>

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";


Cross-domain GET

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


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;  
}


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

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


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


Statement:
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