REST API,将JSON对象从PHP返回到JS文件

时间:2015-05-04 17:56:41

标签: javascript php json api rest

我是第一次写一些其他的API,所以我需要一些帮助。我在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;

1 个答案:

答案 0 :(得分:1)

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

你有什么:

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

myFunction运行,并且不返回任何内容,然后$ .getJSON得到它的响应并且与它没有任何关系。返回并不意味着很多,因为代码具有'继续前进'

你需要做的是处理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");
});

以上内容会抓住文章两次,并且每次都会做一些不同的事情。