4

この PHP API を Javascript で使用しようとしています。Javascript で file_get_contents と json_decode を使用するにはどうすればよいですか?

PHP API コード

$content=@file_get_contents("http://doma.in/api/?url=http://www.google.com&api=APIKEY");
$url=json_decode($content,TRUE);//Decodes json into an array 

if(!$url["error"]){  // If there is no error
 echo $url["short"]; //Outputs the short url 
}else{  
 echo $url["msg"]; //Outputs the error message 
}

Javascript

(function( $ ) {
  $(document).ready(function() { 
    var url = window.location.href;
    var host =  window.location.hostname;
    var title = $('title').text();
    title = escape(title);

    var twitter = 'http://twitter.com/home?status='+title+'%20'+url;
    var facebook = 'http://www.facebook.com/sharer.php?u='+url;

    var tbar = '<div id="sicons">';
    tbar += '<a href="'+twitter+'" id="twitter" title="Share on twitter">Twitter</a>';
    tbar += '<a href="'+facebook+'" id="facebook" title="Share on Facebook">Facebook</a>';
    tbar += '</div>';

  });
})(jQuery);

編集:返信のおかげで

data.php

$content = @file_get_contents('http://doma.in/api.php?api=asd4sdf5634d&url=' . urlencode('http://' . $_SERVER['HTTP_HOST']  . $_SERVER['REQUEST_URI']));
echo $content;

これをJavascriptのトップに追加しました

$.getJSON('data.php', function(data) {
    if(!data.error){ // If there is no error
    alert(data.short) //Outputs the short url
    }else{
    alert(data.msg)
    }
});

Javascriptは現在このようになっています

(function( $ ) {
  $(document).ready(function() { 
    var shorturl = data.short;
    var title = $('title').text();
    title = escape(title);

    var twitter = 'http://twitter.com/home?status='+title+'%20'+url;
    var facebook = 'http://www.facebook.com/sharer.php?u='+url;

    var tbar = '<div id="sicons">';
    tbar += '<a href="'+twitter+'" id="twitter" title="Share on twitter">Twitter</a>';
    tbar += '<a href="'+facebook+'" id="facebook" title="Share on Facebook">Facebook</a>';
    tbar += '</div>';

  });
})(jQuery);

私は何か間違ったことをしていると確信しています。申し訳ありませんが、私はコーディングの初心者です (C、C++)

4

1 に答える 1

0

AJAX によるデータの読み込みは非同期です。最初の呼び出し ( $.getJSON) は、ページが読み込まれるとすぐに実行されますが、パラメーターとして渡すコールバック関数は、基になる HTTP 要求が終了するとすぐに実行されます。これは、プログラムがHTTP 要求を待機するためにブロックしないことを意味します。プログラムの実行を呼び出した後$.getJSON(...)、HTTP 要求が終了したときにコールバック メソッドが呼び出されます。

ページが読み込まれるとすぐに (2 番目の関数で) データを評価します。ただし、データは非同期で読み込まれるため、ドキュメントがレンダリングされて関数が実行されたときにはまだ読み込まれていません。

問題の解決策は、データを評価するコードを次のコールバック関数に移動することです$.getJSON(...)

$.getJSON('data.php', function(data) {
    if (!data.error) {
        // Process your data here!
    } else {
        alert(data.msg)
    }
});
于 2013-02-09T19:48:05.010 に答える