2013-06-07 24 views
13

私は、ローカルファイルへの正しいパスを取得しようとしてこだわっています。でも、アラートが起動されていない、JSON解析ファイルのパス

var answers = JSON.parse('../../data/file.json'); 
alert(answers); 

しかし、それは動作しません:私はjsのコードで、file1.htmlからscript.jsを実行してい

Resources -> 
    data -> 
     file.json 
    js -> 
    folder -> 
     script.js 
    html -> 
     folder -> 
     file1.html 

:私は、以下のディレクトリを持っています。 どうしたのですか?

また、私はこれを試してみた:

function readJSON(file) { 
    var request = new XMLHttpRequest(); 
    request.open('GET', file, false); 
    request.send(null); 
    if (request.status == 200) 
     return request.responseText; 
}; 

var temp = readJSON('../../data/file.json'); 
alert(temp); 

アラートは、この場合には未定義。

+0

「警告は私のために定義されていません。」、「ステータス」は何ですか?_console_にエラーが発生しましたか? –

+0

最後に、 'if(request.status == 200)'が私に問題を起こしました。ファイルが見つかった場合でも0を返します。 削除した場合、すべて正常です。みんなありがとう! – jagger

答えて

26

それがディレクトリdata/にあるので、あなたが実行する必要があります。

var request = new XMLHttpRequest(); 
    request.open("GET", "../../data/file.json", false); 
    request.send(null) 
    var my_JSON_object = JSON.parse(request.responseText); 
    alert (my_JSON_object.result[0]); 
+0

これは文書化された場合、私は、あなたがJSON.parse' 'に_URI_を渡すと、それはあなたのために' REQUEST'を実行する可能性があり実現していませんか? –

+0

うん、パスの質問でこれを逃した。とにかく、それは動作しません... – jagger

+0

ええが...編集が途中で..推測が事実の後に回答している必要がありました私はjsのあなたの純粋なアラートの純粋なJS – karthikr

0

Resourcesは、ルート・パスの場合は、最高:

ファイルパスが'../../data/file.json'

$.getJSON('../../data/file.json', function(data) {   
    alert(data); 
}); 

ピュアJSですfile.jsonにアクセスする方法は/data/file.json

経由だろう3210
+0

実際、私はそれをチタンwebviewで作っているので、通常はリソースはルートパスでなければなりません。 私がdocument.location.pathnameを作成してブラウザで起動すると、私は確かにfile:///を取得します。 – jagger

3

Loading local JSON file

使用この

$.getJSON("../../data/file.json", function(json) { 
    console.log(json); // this will show the info in firebug console 
    alert(json); 
}); 
+3

私が指摘したように、私は純粋なjsで必要です – jagger

6

このソリューションは、非同期呼び出しを使用するようなもの。これは、同期ソリューションよりも優れている可能性があります。

var request = new XMLHttpRequest(); 
request.open("GET", "../../data/file.json", false); 
request.send(null); 
request.onreadystatechange = function() { 
    if (request.readyState === 4 && request.status === 200) { 
    var my_JSON_object = JSON.parse(request.responseText); 
    console.log(my_JSON_object); 
    } 
} 
+0

ようこそ。いい答えだ。私は答えが一人であるときに最良だから編集しました。コメントには他の回答に関する対話が適切です。 –

+0

メインスレッド上の同期XMLHttpRequestは、エンドユーザーの経験に有害な影響を与えるため、非推奨です。詳細については、http://xhr.spec.whatwg.org/を参照してください。 – Evorlor

+3

@Evorlor 2行目のfalseをtrueに変更します。それ以外の場合は、同期操作です。 – Todd