Web サービスのリストを取得し、後でテーブルに表示する ajax リクエストを送信しています。ただし、コードは Firefox では正しく動作しますが、chorome と IE では動作しません。
AJAX リクエスト:
$.ajax({
url: 'http://dev.ragld.com/services/',
method: 'GET',
accept: 'application/json',
beforeSend: setHeader,
async: false,
success: function(data){
var servicesObj = $.parseJSON(data);
$.each(servicesObj, function(i, serviceItem){
alert(serviceItem.name);
});
}
});
//function to setup header information
function setHeader(xhr){
xhr.setRequestHeader('accept', 'application/json');
}
JSON レスポンス:
[
{
"name": "OS-ONS-bar",
"type": "RelationshipService",
"endpoint": "http://dev.ragld.com/services/bar/"
},
{
"name": "OS-ONS-sameAs",
"type": "RelationshipService",
"endpoint": "http://dev.ragld.com/services/sameas/"
},
{
"name": "Maths Service 2",
"type": "ArithmeticService",
"endpoint": "http://dev.ragld.com/services/arithmetic/"
}
]
上記のコードでクロムに入るエラー:
Uncaught TypeError: Cannot read property 'length' of null jquery.min.js:2
e.extend.each jquery.min.js:2
$.ajax.success admin.php:157
f.Callbacks.o jquery.min.js:2
f.Callbacks.p.fireWith jquery.min.js:2
w jquery.min.js:4
f.support.ajax.f.ajaxTransport.send.d jquery.min.js:4
f.support.ajax.f.ajaxTransport.send jquery.min.js:4
f.extend.ajax jquery.min.js:4
(anonymous function) admin.php:148
f.Callbacks.o jquery.min.js:2
f.Callbacks.p.fireWith jquery.min.js:2
e.extend.ready jquery.min.js:2
c.addEventListener.B
問題:
- これは Firefox では正常に機能しますが、Chrome と IE では機能しません。
- これを削除する
$.parseJSON
と、chrome では動作しますが、firefox/IE では動作しません。
PS: ajax リクエストは別のサーバーに対して行われ、このコードは別の場所にあります。誰でもすべてのブラウザで動作する解決策を教えてください???
EDIT1: クロムは自動的にそれを解析するか、json ヘッダーを取得するように見えますが、Firefox では parseJSON を使用して明示的に解析する必要がありますか??? 何か案は?
EDIT2 (FireFox の console.log):
[{"name":"OS-ONS-bar","type":"RelationshipService","endpoint":"http:\/\/dev.ragld.com\/services\/bar\/"},{"name":"OS-ONS-sameAs","type":"RelationshipService","endpoint":"http:\/\/dev.ragld.com\/services\/sameas\/"},{"name":"Maths Service 2","type":"ArithmeticService","endpoint":"http:\/\/dev.ragld.com\/services\/arithmetic\/"}]
Chrome からの console.log: