jQuery AJAX クロスドメイン 質問する

jQuery AJAX クロスドメイン 質問する

ここには、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 はこれを独自に生成されたコールバック メソッドに置き換えます)。

おすすめ記事