我是AJAX世界的新手。我有一个Mysql数据库,其中包含一个填充URL的列。我的最终目标是让on click事件加载一个iframe,其中包含数据库中的唯一URL。如果有人有更好的方法,请告诉我。
现在,我只是想通过尝试检索URL来弄清楚AJAX是如何工作的。我附上了我的Javascript代码和我的PHP代码。
PHP代码确实输出了json编码的数据副本。然而,javascript将变量结果报告为未定义。我认为这可能与AJAX的“异步”方面有关,但我按照本教程尝试使代码正常工作。我感谢您提供的任何帮助。
How do I return the response from an asynchronous call?
这是我的代码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);
答案 0 :(得分:3)
retrieveURL(retrieve_callback());
不正确。
retrieveURL
期望您传递一个函数引用,以便它可以在请求完成后执行它。相反,您正在执行retrieve_callback
并将结果(undefined
)传递给retrieveURL
,因此在请求完成时它实际上从不执行任何操作。不仅如此,而且您在发出请求之前正在执行回调。
你应该传递它:
retrieveURL(retrieve_callback);
答案 1 :(得分:0)
此:
$( document ).ready(function() {
retrieveURL(retrieve_callback());
});
您正在使用调用retrieve_callback()的结果调用retrieveURL。这样做:
$( document ).ready(function() {
retrieveURL(retrieve_callback);
});
答案 2 :(得分:0)
retrieveURL(retrieve_callback); // no brackets for retrieve_callback
在Javascript中,方法也是对象。在这种情况下,您将方法retrieve_callback作为对象传递给retrieveURL。另一方面,retrieveURL将方法retrieve_callback作为成员“success”分配给传递给$ .getJSON()的匿名对象。 这意味着匿名对象现在有一个名为“success”的方法,其作用类似于retrieve_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);