Heim  >  Artikel  >  Backend-Entwicklung  >  Ajax domänenübergreifende Lösung

Ajax domänenübergreifende Lösung

巴扎黑
巴扎黑Original
2016-11-23 15:55:261555Durchsuche

Domänenübergreifender 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);

Aufrufmethode:

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


Erstellen Sie eine Datei ajax_blank.php im Stammverzeichnis der Website
Der Inhalt ist:

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

Und js zur aufrufenden Seite hinzufügen:

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

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


Die Lösung für die Nichtausführung von jsonp return unter IE6
Fügen Sie

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


zum PHP-Return-Header hinzu und fügen Sie return false zum js-Trigger hinzu Schaltfläche; Lösen Sie das Ajax-Unterbrechungsproblem unter IE6
Die von Ajax übermittelten Daten liegen im Allgemeinen im utf8-Format vor und verwenden im Allgemeinen iconv("utf-8", "gbk//IGNORE", $str) oder mb_convert_encoding($value, '. gbk‘, ‚utf-8‘) zur Konvertierung. Und wenn Sie auf Wörter mit Marszeichen stoßen, wie zum Beispiel: ♡ Jingle Bell... Jingle Bell... Frohe Weihnachten! ♡, ersteres entfernt Sonderzeichen und letzteres wandelt Sonderzeichen in Fragezeichen um, sodass für die Verwendung der ajaxFormPost-Übermittlungsmethode keine Kodierungskonvertierung erforderlich ist


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:ecshop基础函数列表大全Nächster Artikel:PHP 简单 遍历 重命名