Javascript 我的AJAX代码有什么问题

Javascript 我的AJAX代码有什么问题,javascript,ajax,json,jquery,Javascript,Ajax,Json,Jquery,我对AJAX的世界是全新的。我有一个Mysql数据库,其中包含一列URL。我的最终目标是让点击事件从数据库加载一个具有唯一URL的iframe。如果有人有更好的方法,请告诉我 然而,现在我只是试图通过检索URL来了解AJAX是如何工作的。我已经附上了我的Javascript代码和PHP代码 PHP代码输出数据的json编码副本。但是,javascript将变量结果报告为未定义。我认为这可能与AJAX的异步方面有关,但我遵循了本教程,试图使代码正常工作。我很感激能提供的任何帮助 这是我的代码Jav

我对AJAX的世界是全新的。我有一个Mysql数据库,其中包含一列URL。我的最终目标是让点击事件从数据库加载一个具有唯一URL的iframe。如果有人有更好的方法,请告诉我

然而,现在我只是试图通过检索URL来了解AJAX是如何工作的。我已经附上了我的Javascript代码和PHP代码

PHP代码输出数据的json编码副本。但是,javascript将变量结果报告为未定义。我认为这可能与AJAX的异步方面有关,但我遵循了本教程,试图使代码正常工作。我很感激能提供的任何帮助

这是我的代码Javascript代码,它记录的结果是未定义的,我将其发送到控制台

function retrieve_callback(result) { 
    console.log (result);
    console.log("I made it!");
    };

function retrieveURL (retrieve_callback) {  
    $.getJSON({
        url: './fetch.php',
        dataType: 'json',
        success: retrieve_callback
    });
}

//Runs when our document initializes
$( document ).ready(function() {
    retrieveURL(retrieve_callback());
});
这是我的PHP代码,它输出URL的JSON数组

<?php
//--------------------------------------------------------------------------
// Connect to mysql database (I've removed the info from this example but it works)
//--------------------------------------------------------------------------

$db = new mysqli($DB_HOST, $DB_USER, $DB_PASSWORD, $DB_NAME);

if($db->connect_errno > 0){
    die('Unable to connect to database [' . $db->connect_error . ']');
}

//--------------------------------------------------------------------------
// Query mysql database
//--------------------------------------------------------------------------

$links = array();

//SQl query
$sql = <<<SQL
    SELECT `Gnews_url`
    FROM `Gnews_RSS`
SQL;

if(!$result = $db->query($sql)){
    die('There was an error running the query [' . $db->error . ']');
}

while($row = $result->fetch_assoc()){
    array_push($links, $row);
}

echo json_encode($links);
retrieveURLretrieve_回调;这是不正确的

retrieveURL希望您传递函数引用,以便在请求完成后可以执行它。相反,您正在执行retrieve_回调并将未定义的结果传递给retrieveURL,因此当请求完成时,它实际上不会做任何事情。不仅如此,您还在发出请求之前执行回调

你应该像这样通过考试:

retrieveURLretrieve_回调

这是:

$( document ).ready(function() {
    retrieveURL(retrieve_callback());
});
$( document ).ready(function() {
    retrieveURL(retrieve_callback);
});
您正在调用retrieveURL,其结果是调用retrieve\u回调。改为这样做:

在Javascript中,方法也是对象。在本例中,您将把方法retrieve_callback作为对象传递给retrieveURL。另一方面,retrieveURL将retrieve_callback方法作为成员success分配给一个匿名对象,该对象被传递到$.getJSON中。 这意味着匿名对象现在有一个名为success的方法,它的工作方式类似于retrieve\u callback

AJAX请求成功后,jquery使用匿名对象并调用其成功方法,如下所示:

blaObject.success(ajaxResult);
我们知道success是retrieve_callback的一个副本,因此将发生以下情况:

// instead of blaObject.success(ajaxResult);
retrieve_callback(ajaxResult);
让我们简短地解释一下,请参见括号的用法:

// Get the result of a call of retrieve_callback() and pass it to retrieveURL.
retrieveURL(retrieve_callback());

// Pass the method retrieve_callback itself  retrieveURL.
retrieveURL(retrieve_callback);

谢谢,但这会带来一个新问题。我的请求不是调用success函数。我添加了一个错误返回来调试它,但它也没有输出任何信息。看起来这个请求被挂起了。再次感谢大家的帮助。完全有可能你的PHP在什么地方出了问题,我对它不太熟悉。添加一个失败:在成功后检索_回调,看看是否触发了。我添加了一个失败函数,只需执行alertI Missed和console.logI Missed。仍然没有来自success、error或failure函数的输出。我将.getJSON更改为.ajax,并收到此错误警报异常。。。对受限URI的访问被拒绝代码:1012 nsresult:0x805303f4 NS_ERROR_DOM_BAD_URI location:Line:6]我链接到Jquery的方式似乎很疯狂,我将尝试下载它并像那样运行它,我通过将/fetch.php更改为fetch.php修复了这一问题。现在我只需要找出我的无效字符错误代码是从哪里来的。
// Get the result of a call of retrieve_callback() and pass it to retrieveURL.
retrieveURL(retrieve_callback());

// Pass the method retrieve_callback itself  retrieveURL.
retrieveURL(retrieve_callback);