如何在 Javascript 中使用 file_get_contents 和 json_decode

Posted

技术标签:

【中文标题】如何在 Javascript 中使用 file_get_contents 和 json_decode【英文标题】:How to use file_get_contents and json_decode in Javascript 【发布时间】:2013-02-09 12:58:11 【问题描述】:

我正在尝试在 javascript 中使用这个 php API。?​​p>

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++)的初学者

【问题讨论】:

javascript 中没有file_get_contents()。您可以使用 ajax 仅从同一域下载页面 意味着最好将 Javascript 转换为 PHP 代码。感谢您的回复。 Acctionaly 你应该混合 PHP+AJAX 来让它工作。使用 PHP 在单独的文件中创建按钮 html,使用 AJAX 下载按钮 示例:gist.github.com/anonymous/4745269。但老实说,谷歌让你可以访问 JAVASCRIPT API,所以你根本不需要使用 PHP.... 嘿,看看这个链接可能对你有用***.com/questions/8227638/… 【参考方案1】:

通过 AJAX 加载数据是异步。您的第一次调用 ($.getJSON) 在页面加载后立即执行,但您作为参数传递的回调函数仅在基础 HTTP 请求完成后才执行。这意味着您的程序不会阻塞等待 HTTP 请求;在调用$.getJSON(...) 之后,你的程序将继续运行,并且在 HTTP 请求完成的某个时间调用回调方法。

您在页面加载后立即评估您的数据(在您的第二个函数中)。但是,由于您的数据是异步加载的,因此在呈现文档并执行您的函数时尚未加载。

您的问题的解决方案是将评估数据的代码移动到$.getJSON(...)的回调函数中:

$.getJSON('data.php', function(data) 
    if (!data.error) 
        // Process your data here!
     else 
        alert(data.msg)
    
);

【讨论】:

以上是关于如何在 Javascript 中使用 file_get_contents 和 json_decode的主要内容,如果未能解决你的问题,请参考以下文章

确实 API:无法打开流:连接被拒绝

Angular AJAX 发布问题

数组的问题:注意:未定义的偏移量:0

php实现简易留言板效果

[BJDCTF2020]ZJCTF,不过如此

如何在 JavaScript 中使用可枚举