2013-01-17 10 views
15

JSONを使用してデータを転送しています。ajaxを使用してファイルからJSONオブジェクトをロードするにはどうすればよいですか?

スクリプトに1つのJSONオブジェクトしか含まれていないAjaxファイルを読むには、HTMLページで何が必要ですか?

jQueryも必要ですか、そのJSONファイルをAjaxでロードすることはできますか?

ブラウザによって異なるのですか?

+0

:クライアント側で

if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'){ // if it's an ajax request $json['success'] = 1; $json['html'] = '<div id="test">..[more html code here].. </div>'; echo json_encode($json); }else{ // if it's an non ajax request } 

次使用jqueryのAJAXを行うことができますjQueryは他の多くのライブラリと同様、Ajaxを簡単にしますが、Vanilla JSでAjaxを実行できます。 – nnnnnn

+0

Webサーバーに、シリアル化されたJSONデータを含む静的ファイルがありますが、AJAXを使用してそのデータを読み取る必要がありますか? –

+0

はい、Mike Christensen – rubo77

答えて

47

、すべてがJSONファイルを取得し、それを解析するためにはJavaScriptバニラで提供されています:

function fetchJSONFile(path, callback) { 
    var httpRequest = new XMLHttpRequest(); 
    httpRequest.onreadystatechange = function() { 
     if (httpRequest.readyState === 4) { 
      if (httpRequest.status === 200) { 
       var data = JSON.parse(httpRequest.responseText); 
       if (callback) callback(data); 
      } 
     } 
    }; 
    httpRequest.open('GET', path); 
    httpRequest.send(); 
} 

// this requests the file and executes a callback with the parsed result once 
// it is available 
fetchJSONFile('pathToFile.json', function(data){ 
    // do something with your data 
    console.log(data); 
}); 
+0

IE 5と6をサポートする必要がない限り –

+3

あなたは '|| httpRequest.status === 0'(ローカル接続の場合)。それは本当に私が 'xmlhttprequest'を学び始めたときに私を驚かせました –

+2

@JuanMendesこのコードがIEの古いバージョンをサポートするために必要なのは' var httpRequest =(window.XMLHttpRequest)?new XMLHttpRequest():new ActiveXObject( " Microsoft.XMLHTTP ");'しかし、誰がIEの古いバージョンを気にしていますか? ;) –

1

以前は、Ajaxはさまざまなブラウザで異なっていました(ただし、残念ながらまだ多くのユーザーが使用している古いブラウザをサポートする必要がある場合は、そのままです)。古いブラウザでは、ブラウザの違いを処理するためにJQuery(またはそれに相当するコード)のようなライブラリが必要です。いずれにしても、初心者の方には、良いドキュメント、簡単なAPI、そしてすぐに始めることをお勧めします。MDNもJavaScript自体に役立ちます(JavaScript/DOM APIについては、 jQueryに依存しています)。あなたが任意のライブラリを必要としない

3

最も効率的な方法は、プレーンJavaScriptを使用することです:

var a = new XMLHttpRequest(); 
a.open("GET","your_json_file",true); 
a.onreadystatechange = function() { 
    if(this.readyState == 4) { 
    if(this.status == 200) { 
     var json = window.JSON ? JSON.parse(this.reponseText) : eval("("+this.responseText+")"); 
     // do something with json 
    } 
    else alert("HTTP error "+this.status+" "+this.statusText); 
    } 
} 
a.send(); 
+0

このコードは機能しますが、間違ったパスを指定すると、 "NS_ERROR_DOM_BAD_URI:制限付きURIへのアクセスが拒否されました"という結果になり、コードが機能しないように見えます。 –

1

私はajax jqueryを使うことを好みます。 Jqueryはライブをもっと簡単にします。例えば、サーバー側で何ができるか

は、私はあなたがPHPを使用していると仮定し、次のとおりです。

$.ajax({ 
      type: "POST", 
      url: "[your request url here]", 
      data: { name: "JOKOOOOW OOWNOOO" }, 
      complete: function(e, xhr, settings){ 
       switch(e.status){ 
        case 500: 
        alert('500 internal server error!'); 
        break; 
        case 404: 
         alert('404 Page not found!'); 
        break; 
        case 401: 
         alert('401 unauthorized access');  
        break;  
       } 
      }   
     }).done(function(data) { 
      var obj = jQuery.parseJSON(data) 

      if (obj.success == 1){ 

        $('div#insert_html_div').html(obj.html); 

      }else if (obj.error == 1){ 


          } 


      // etc 

     }); 
+0

答えはありませんが、代わりに – rubo77

関連する問題