Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript RESTAPI,将JSON对象从PHP返回到JS文件_Javascript_Php_Json_Api_Rest - Fatal编程技术网

Javascript RESTAPI,将JSON对象从PHP返回到JS文件

Javascript RESTAPI,将JSON对象从PHP返回到JS文件,javascript,php,json,api,rest,Javascript,Php,Json,Api,Rest,我第一次在写RESTAPI,所以我需要一些帮助。我在stackoverflow上找到了一些解决问题的方法,我设法解决了它们。但现在我又遇到了另一个问题,找不到解决办法 首先,js文件代码 $.getJSON('test.php', function(data) { console.log(data); articles = data; return articles; }); 这是js文件,我从中向php文件发送请求,然后返回数据。问题是,当我记

我第一次在写RESTAPI,所以我需要一些帮助。我在stackoverflow上找到了一些解决问题的方法,我设法解决了它们。但现在我又遇到了另一个问题,找不到解决办法

首先,js文件代码

$.getJSON('test.php', function(data) {
    console.log(data);
    articles = data;
    return articles;            
});
这是js文件,我从中向php文件发送请求,然后返回数据。问题是,当我记录从php返回的数据时,它在浏览器控制台中看起来很好,所有数据都在那里。但当我尝试使用页面上的数据(以及我的return语句)时,它不起作用。如果我将退货物品行替换为

return [{"name":'Name goes here',"description":'Description goes here'}];
它在页面上运行良好。这让我很困扰,因为在浏览器控制台中,我可以看到从php文件返回的所有对象,但它们在页面上不起作用。我希望你们中的任何人都能帮助我。我正在下面粘贴我的php文件

$json = array(
        array(
            "name" => 'Name goes here',
            "description" => 'Test description.',
            "link" => 'articles/articleName',
            "img" => '../images/article1.jpg'
        ),
        array(
            "name" => 'Name goes here 2',
            "description" => 'Not ready yet',
            "link" => '#',
            "img" => ''
        ),
        array(
            "name" => 'Name goes here 3',
            "description" => 'Not ready yet',
            "link" => '#',
            "img" => ''
        )
    );

    $jsonstring = json_encode($json, JSON_PRETTY_PRINT);
    echo $jsonstring;

问题是您返回的是$.getJson调用的异步部分

你所拥有的:

function myFunction()
{
    $.getJSON('test.php', function(data) {
        console.log(data);
        articles = data;
        return articles;            
    });
}
var articles = myFunction();
myFunction运行,不返回任何内容,然后$.getJSON稍后会得到响应,与此无关。。Return在那里没有什么意义,因为代码已经“继续”

您需要做的是处理getJSON异步部分中的数据(或者传入一个函数来处理其中的内容)

您需要的:

function myFunction()
{
  $.getJSON('test.php', function(data) {
    console.log(data);
    articles = data;          

    //do something with articles
    //maybe set a div equal to them
    $("#myArticles").innerHTML = articles;

    //or call a function with articles as a param
    doSomethingCool(articles);
  });
}

function doSomethingCool(arts)
{
  alert("You have articles: " + arts);
}
你甚至可以把你想做的事作为一个情妇传进来

function myFunction(callback)
{
  $.getJSON('test.php', function(data) {
    console.log(data);
    articles = data;          

    callback(articles);
  });
}


myfunction(alert);  //will alert with the articles

//define the callback function 'on the fly'
myfunction(function(articlesFromJson) {
  if(articlesFromJson.length > 2)
    alert("wow 2+ arcticles");
});

上面的文章会抓取两次,每次都会做一些不同的事情。

谢谢您的快速回复。我试过你的选择,和以前一样。在这两种情况下,我都从php文件中获取JSON,但似乎存在问题,因为我无法在页面上使用这些数据。(在控制台日志中,对象是可见的!)问题是,我的朋友让我将他的页面与数据库连接起来,因为这是我第一次用api这样做,我不知道这种页面是如何工作的。它会自动从这个函数中读取return,并在第一页生成文章。但随着我的归来,只有一片空白。如果我插入上面提到的JSON行,它就可以工作了。嗯,这绝对是一种方法。您是如何尝试“获取页面上的数据”的?您正在使用数据设置div的内容吗?

{{article.name}}

{{article.description | articledesc:120}

很抱歉代码太疯狂了。。这就是他获取数据的方式,后面必须有一些js来处理这些调用。看起来您使用的是angular,您需要在$.getJSONYep的异步部分设置$scope.articles。这是angular。将检查一些教程并修复它。感谢您的帮助!