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

Ajax domänenübergreifende Lösung

巴扎黑
Freigeben: 2016-11-23 15:55:26
Original
1600 Leute haben es durchsucht

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);
Nach dem Login kopieren

Aufrufmethode:

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


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>
Nach dem Login kopieren

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";
Nach dem Login kopieren


Cross-Domain GET

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


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;  
}
Nach dem Login kopieren


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;);
Nach dem Login kopieren


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


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage