Heim >Backend-Entwicklung >PHP-Tutorial >$.ajax und $.getJson lösen domänenübergreifende Anfragen

$.ajax und $.getJson lösen domänenübergreifende Anfragen

WBOY
WBOYOriginal
2016-08-08 09:30:13972Durchsuche

Beim Schreiben von js werden Sie immer auf das Problem domänenübergreifender Anfragen stoßen und diese aufzeichnen:

1) Verwenden Sie $.ajax, aber Der Rückgabedatentyp sollte auf jsonp eingestellt sein, Beispiel:

     $.ajax({
        type: 'get',
        contentType: "application/json; charset=utf-8",      
        url: "http://localhost:8080/aqi/getCityList.php",
        dataType: 'jsonp',
        headers: {
            Accept: "application/json",
            "Access-Control-Allow-Origin": "*"
        },
        crossDomain: true,
        async: false,
        jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback)
        jsonpCallback:"success_jsonpCallback",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名
        success:function(json){
          getCityListSuccess(json);
        },
        error: function (data, textStatus, errorThrown) {
            console.log("error" + ' ' + JSON.stringify(data) + textStatus + errorThrown);
        }
    });
Der Code auf der PHP-Seite lautet:
<?php
	header("Content-Type: text/html;charset=utf-8");
  	$db_name="aqidata.db";
	$conn = new sqlite3($db_name);
	$callback = $_GET[&#39;callback&#39;];
	$resultarray=array();
    <span style="white-space:pre">	</span>$sql = "select * from 'city' where 1=1 order by id";
    <span style="white-space:pre">	</span>$result = $conn->query($sql);
    <span style="white-space:pre">	</span>$i=0;
    <span style="white-space:pre">	</span>while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
    	<span style="white-space:pre">	</span>$resultarray[$i]=$row;
	    <span style="white-space:pre">	</span>$i++;
    <span style="white-space:pre">	</span>}

	echo $callback.'('.json_encode($resultarray).')';


?>
Hinweis: 1. Der jsonp-Parameter muss in Ajax angegeben werden, und dann das Backend. Schreiben Sie den Namen der Rückruffunktion in den Rückgabewert.

Der Blog-Beitrag, auf den ich mich beziehe, ist: http://www.cnblogs.com/xcxc/p/3729660.html

2) Verwenden Sie $ .getJSON, diese Funktion unterstützt domänenübergreifende Aufrufe.

     $.getJSON("http://localhost:8080/aqi/getCityList.php",function(json){
      getCityListSuccess(json);
     });
Aber der Backend-Code (PHP) muss hinzugefügt werden:
header("Access-Control-Allow-Origin:*");
Andernfalls wird ein Fehler gemeldet:
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. 
Der Blog-Beitrag, auf den ich verweise zu ist: http://blog.163.com/lvshutao@126/blog/static/164637467201442253942499/?latestBlog

Das Obige stellt $.ajax und $.getJson zur Lösung domänenübergreifender Anforderungen vor, einschließlich des Inhalts. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.

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