ここには、test.php と testserver.php という 2 つのページがあります。
テスト
<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>
テストサーバー.php
<?php
$arr = array("element1",
"element2",
array("element31","element32"));
$arr['name'] = "response";
echo json_encode($arr);
?>
問題は、これらのファイルの両方が同じサーバー(ローカルホストまたはWebサーバー)にある場合、動作してalert("Success")
呼び出されます。異なるサーバーにある場合、つまりWebサーバー上のtestserver.phpとローカルホスト上のtest.phpの場合、動作せず、alert("Error")
実行されます。AJAX内のURLが次のように変更されても、http://domain.example/path/to/file/testserver.php
ベストアンサー1
使用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 が間違っている可能性があります。php を使ってからしばらく経っています。いずれにしても、出力にはcallbackName('jsonString')
引用符に注意する必要があります。jQuery は独自のコールバック名を渡すので、GET パラメータからそれを取得する必要があります。
そしてステファン・ケンドールが投稿したように、$.getJSON()は短縮メソッドですが、'callback=?'
GET パラメータとして URL に追加する必要があります (はい、値は ? です。jQuery はこれを独自に生成されたコールバック メソッドに置き換えます)。