Šeit ir divas lapas, test.php un testserver.php.
test.php
<script src="scripts/jq.js" type="text/javascript"></script>
<script>
$(function() {
$.ajax({url:"testserver.php",
success:function() {
alert("Success");
},
error:function() {
alert("Error");
},
dataType:"json",
type:"get"
}
)})
</script>
testserver.php
<?php
$arr = array("element1",
"element2",
array("element31","element32"));
$arr['name'] = "response";
echo json_encode($arr);
?>
Tagad mana problēma: ja abi šie faili ir uz viena servera (vai nu localhost, vai web serveris), tas darbojas un alert("Success")
tiek izsaukts; Ja tie ir uz dažādiem serveriem, t.i., testserver.php uz web servera un test.php uz localhost, tas nedarbojas un alert("Error")
tiek izpildīts. Pat ja ajax iekšpusē URL tiek mainīts uz http://domain.com/path/to/file/testserver.php.
Izmantojiet JSONP.
jQuery:
$.ajax({
url:"testserver.php",
dataType: 'jsonp', // Notice! JSONP <-- P (lowercase)
success:function(json){
// do stuff with json (in this case an array)
alert("Success");
},
error:function(){
alert("Error");
}
});
PHP:
<?php
$arr = array("element1","element2",array("element31","element32"));
$arr['name'] = "response";
echo $_GET['callback']."(".json_encode($arr).");";
?>
Echo var būt nepareizi, tas's ir pagājis laiks, kopš es'esmu izmantojis php. Jebkurā gadījumā jums ir nepieciešams izvadīt callbackName('jsonString')
, pamanot pēdiņas. jQuery nodos savu atpakaļsaukuma nosaukumu, tāpēc jums tas ir jāiegūst no GET parametriem.
Un, kā rakstīja Stefan Kendall, $.getJSON() ir saīsinātā metode, bet tad url kā GET parametram jāpievieno 'callback=?'
(jā, vērtība ir ?, jQuery to aizstāj ar savu ģenerēto callback metodi).
Jums jāiepazīstas ar Same Origin Policy:
Skaitļošanas tehnikā tā pati izcelsmes politika ir svarīgs drošības jēdziens, kas attiecas uz vairākiem pārlūkprogrammas puses programmēšanas valodās, piemēram, JavaScript. politika ļauj skriptiem, kas darbojas uz lapas, kas nāk no vienas un tās pašas vietnes piekļūt cits cita metodēm un īpašībām bez īpašas ierobežojumiem, bet neļauj piekļūt lielākajai daļai metožu un īpašību visā lapām dažādās vietnēs.
Lai varētu iegūt datus, tiem jābūt:
Tam pašam protokolam un mitinātājam
Lai to apietu, ir jāievieš JSONP.
Pārlūkprogrammas drošība neļauj veikt ajax izsaukumu no lapas, kas izvietota vienā domēnā, uz lapu, kas izvietota citā domēnā; to sauc par "same-origin policy".