0
$($.ajax({
    url: 'http://localhost:3606/runs',
    //beforeSend: function (xhr) {
    //    xhr.setRequestHeader("Origin", "http://localhost:2286/");
    //},
    success: function(data) {
        for (var i = 0; i < data.length; i++) {
            var list = $('#runs');
            list.append('<li id="' + data[i].RunId + '">' + data[i].Distance + "</li>");
        }
     }
}))

次のコードは、ie10 および chrome 22 では正しく機能します。firefox 15.0.1 では機能しません。上記のデータ変数は、残りのサービス (Web API) から返されています。返されるjsonは次のとおりです。

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/8.0
Access-Control-Allow-Origin: *
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcQnJlbnRcRG9jdW1lbnRzXFZpc3VhbCBTdHVkaW8gMjAxMlxQcm9qZWN0c1xURlNcUnVuTG9nXE1haW5cUnVuTG9nXHJ1bnM=?=
X-Powered-By: ASP.NET
Date: Fri, 28 Sep 2012 16:04:47 GMT
Content-Length: 197

[{"RunId":1,"Date":"2012-09-28T00:00:00","Distance":4.00,"Hours":null,"Minutes":35,"Seconds":null},{"RunId":2,"Date":"2012-09-28T00:00:00","Distance":6.00,"Hours":null,"Minutes":50,"Seconds":null}]

ie & chrome の data.length は 2 です。firefox の data.length は 197 です。firefox での data 変数は次のようになります。

"[{"RunId":1,"Date":"2012-09-28T00:00:00","Distance":4.00,"Hours":null,"Minutes":35,"Seconds":null},{"RunId":2,"Date":"2012-09-28T00:00:00","Distance":6.00,"Hours":null,"Minutes":50,"Seconds":null}]"

ie/chrome では次のようになります。

<ul id="runs">
    <li id="1">4</li>
    <li id="2">6</li>
</ul>

Firefox の場合:

<ul id="runs">
   <li id="undefined">undefined</li>
   ...197 times
</ul>

Firefox が正しく動作しない理由を知っている人はいますか?

4

2 に答える 2

1

データをjsonに解析する必要があると思います。現在、文字列形式で提供されており、Firefox では文字列のように扱われます。代わりに、次のコードを試してください。

$($.ajax({
    url: 'http://localhost:3606/runs',
    //beforeSend: function (xhr) {
    //    xhr.setRequestHeader("Origin", "http://localhost:2286/");
    //},
    success: function(data) {
        var result = JSON.parse(data);
        for (var i = 0; i < result.length; i++) {
            var list = $('#runs');
            list.append('<li id="' + result[i].RunId + '">' + result[i].Distance + "</li>");
        }
     }
}))

これが役立つことを願っています!!

于 2012-09-28T16:39:55.767 に答える
1

$.ajax-call に dataType-option を追加します。

$($.ajax({
    url: 'http://localhost:3606/runs',
    dataType:'json',
    //beforeSend: function (xhr) {
    //    xhr.setRequestHeader("Origin", "http://localhost:2286/");
    //},
    success: function(data) {
        for (var i = 0; i < data.length; i++) {
            var list = $('#runs');
            list.append('<li id="' + data[i].RunId + '">' + data[i].Distance + "</li>");
        }
     }
}))
于 2012-09-28T16:40:40.353 に答える