我的AJAX代码出了什么问题
What is wrong with my AJAX code
我是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);
retrieveURL(retrieve_callback());
不正确。
retrieveURL
希望您传递一个函数引用,以便在请求完成后执行它。相反,您正在执行retrieve_callback
,并将结果(undefined
)传递给retrieveURL
,因此当请求完成时,它实际上不会执行任何操作。不仅如此,您还在发出请求之前执行回调。
你应该像这样通过:
retrieveURL(retrieve_callback);
这:
$( document ).ready(function() {
retrieveURL(retrieve_callback());
});
您正在使用调用retrieve_callback()的结果调用retrieve URL。改为:
$( document ).ready(function() {
retrieveURL(retrieve_callback);
});
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_recallback"的副本,因此将发生以下情况:
// 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);
- 我不知道我的编码有什么问题.(JavaScript)
- 我的流星路线出了什么问题
- 此nodeValue替换代码有什么问题
- 这个正则表达式的日期/时间有什么问题
- 我的CSS/Javascript下拉菜单测试代码出了什么问题
- 这个代码出了什么问题?(Jquery)
- 下面的Reg表达式出了什么问题
- 鼠标事件,我的代码出了什么问题
- 这个javascript语法有什么问题
- 动态创建foreignGroup并将其添加到svg中有什么问题
- 此代码中动态生成选择框有什么问题
- 我的javascript有什么问题?.className
- 这个 ajax.js 代码有什么问题
- JS代码有什么问题,让我知道代码是否可以改进
- 我的 Browserify JavaScript 代码有什么问题
- 图像上传功能将++(+1)副本添加到下一次上传.出了什么问题或如何重置“选定图像”
- 使用 Javascript 动态删除行.我的代码有什么问题
- AngularJS:这个注入我的控制器有什么问题
- 这个jQuery if语句有什么问题
- JavaScript:有人能告诉我我的代码出了什么问题吗?