シナリオ: json_encoded 配列にデータを出力する php スクリプトと、AJAX 経由で php スクリプトを呼び出して結果を処理する javascript を含むインデックス html ページがあります。
問題: 200 応答コードを受け取り、responseText が json_encoded 配列であるにもかかわらず、AJAX 呼び出しが.fail
代わりに実行されます。.done
これに苦労した後、炎や不当な反対票ではなく、助けを求めています。私はこれを調査しましたが、同様の質問は問題を解決していません。
getDomains.php:
<?php
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
$domains = array();
$domains[] = array('domainID' => 1, 'domainName' => 'alpha.com');
$domains[] = array('domainID' => 2, 'domainName' => 'beta.com');
echo json_encode($domains);
?>
ブラウザでの getDomains.php 出力:
[{"domainID":"1","domainName":"alpha.com"},{"domainID":"2","domainName":"beta.com"}]
index.html/ajax.js:
<script>
// Ajax execute
var go = $.ajax({
url: 'getDomains.php',
type: 'POST',
dataType: 'json'
})
.done(function(results) {
console.debug('callAPI done');
console.debug(results);
})
.fail(function(msg) {
console.debug('callAPI fail');
console.debug(msg);
})
.always(function() {
});
</script>
index.html にアクセスするとcallAPI fail
、console.log にメッセージが表示されます。
callAPI fail
Object { ...
responseText: "[{"domainID":"1","domainName":"alpha.com"},{"domainID":"2","domainName":"beta.com"}]"
status: 200
statusText: "OK"