- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不确定这是否是使用 ajax 的有效方法,但我正在使用 for 循环遍历信息数组:
loadProfiles.js
var tempString = "";
var searchPeople = function(sv){
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function(){
if(xhttp.readyState == 4 && xhttp.status == 200){
tempString = xhttp.responseText;
loadPeople(tempString, sv);
}
}
var searchvalue = sv;
searchvalue = searchvalue.join(" ");
xhttp.open("GET", "php/searchProfiles.php?searchvalue=" + searchvalue, true);
xhttp.send();
}
var loadPeople = function(people, sv){
loadedPeople = [];
var normList = people.split(",");
var list = people.toLowerCase().split(",");
list.splice(list.length - 1, 1);
var zsearch = sv;
for(var i = 0; i < list.length; i++){
loadedImageId[i] = list[i].split("_")[1];
if(loadedImageId[i] == 0){
loadedImageId[i] = "images/GrayProfilePic.png";
}
else{///////////////////////////////////This is what I need to fix
var grabPic = new XMLHttpRequest();
grabPic.onreadystatechange = function(){
if(grabPic.readyState == 4 && grabPic.status == 200){
console.log("ready to go");
loadedImageId[i] = grabPic.responseText;
if(loadedImageId[i] == "Error1"){
loadedImageId[i] = "images/GrayProfilePic.png";
}
}
}
grabPic.open("GET", "php/grabProfPics.php?imageid=" + loadedImageId[i], true);
grabPic.send();
}//////////////////////////////////////////////
list[i] = list[i].split("_")[0];
for(var j = 0; j < zsearch.length; j++){
if(list[i].indexOf(zsearch[j]) > -1){
if(loadedPeople.indexOf(list[i]) == -1){
if(loadedPeople.indexOf(normList[i].split("_")[0]) == -1){
loadedPeople.push(normList[i].split("_")[0]);
}
}
}
}
}
console.log(loadedPeople);
console.log(loadedImageId);
}
searchProfiles.php
$query = "SELECT username, imageid FROM `memberHandler`";
$result = mysqli_query($connect, $query) or die("Could not query");
while($row = mysqli_fetch_assoc($result)){
echo $row['username'] . "_" . $row['imageid'] . ",";
}
grabProfPics.php
$query = "SELECT image, mime_type FROM memberProfilePictures WHERE `id`='$imageid'";
$result = mysqli_query($connect, $query);
if(mysqli_num_rows($result) != 0){
$row = mysqli_fetch_assoc($result);
$imagesrc = $row['image'];
$imagesrc = base64_encode($imagesrc);
$imagetype = $row['mime_type'];
echo "data:" . $imagetype . ";base64," . $imagesrc . "";
}
else{
echo "Error1";
}
然而,服务器需要一些时间来发送它的返回代码,此时 for 循环中的变量 i 早已被更改。有没有一种方法可以有效地做到这一点,并根据当前数组值使用新信息更新数组?我希望这个问题有意义!感谢您的帮助=)
基本上我试图循环遍历图像id,如果id不为零(意味着他们已经为其个人资料设置了图像 - 否则他们还没有并且id为0),那么它将使用ajax来连接到图像数据库,获取与特定 ID 相关的图像,然后返回图像源并更新数组。很抱歉,在我认为我可以使用更简化的版本之前,我没有更具体地说出这一点。
最佳答案
发布问题更新:我在您粘贴所有代码之前写了这篇文章。它仍然适用,但还有一些想法:
new XMLHttpRequest();
代码(而不使用 fetch 或 jquery 之类的库),则应该将其包装在 function(url,data,method ,成功Cb,错误Cb)。图书馆会提供帮助。i
早已移动,并且与用于进行调用的索引不匹配。
loadedImageId[i] = grabPic.responseText;
继续,原始的 aysnc 解释:
您将了解如何处理常规异步任务,其中包括 ajax 调用。
有很多方法可以解决这个问题,特别是 callbacks和 promises .
虽然您可以以同步方式执行此操作,但对于玩具或快速破解之外的任何其他内容,最好选择异步数据。
首先,定义我们的服务。在这种情况下,它不会离开我们的机器,但原理是相同的。您发送一些内容(个人资料 ID)并获取一些内容(个人资料图片 URL)。
// After ~1-2 seconds, answer the callback with the evenness of the input
var isEvenAjax = function(num,cb) {
setTimeout(function(){
var isEven = num % 2 === 0;
cb(num + " is " + (isEven ? "Even" : "Odd"));
},(Math.floor(Math.random() * 12) + 3) * 150);
};
你可以有不同的签名,但这是关键。您将数据放入某物中,等待一段时间,然后得到响应。
例如:
isEvenAjax(2,console.log);
isEvenAjax(3,console.log);
isEvenAjax(7,console.log);
可能会产生以下反馈:
"7 is Odd"
"2 is Even"
"3 is Odd"
以及我们的测试数据:
var information = [
10,11,12,
];
现在将我们的数据发送到服务并取回一些内容。一个简单的 foreach 就可以处理这个问题(注意:这是为了简单的演示目的。这可能很快就会变得非常困惑。Promise 是一个很好的方法)。
var getInformationResponses = function(information,cb) {
var responses = [];
information.forEach(function(i){
isEvenAjax(i,function(response){
console.log("Feedback for " + i + " is: " + response);
responses.push({num:i,response:response});
if (responses.length >= information.length){
cb(responses);
}
});
});
};
请注意,包装所有异步调用的函数本身就是异步的(并且,在我们的回调样式下,它需要“完成”回调)。
分解:
声明响应数组(我们将所有结果放入其中)后,循环遍历所有信息元素:
var responses = [];
information.forEach(function(i){
对于每个元素,进行异步调用。
isEvenAjax(i,function(response){
对于每个元素的回调(例如,当从长时间运行的服务返回数据时),请使用 console.log(用于演示)进行记录,并将结果和推送到响应数组。维护源数据可能对所有应用程序来说并不重要,但在某些情况下(例如哪个配置文件 ID 对应于哪个配置文件 URL)它会。回想一下:异步调用永远不会保证顺序。
console.log("Feedback for " + i + " is: " + response);
responses.push({num:i,response:response});
现在,检查响应数量是否与请求匹配。如果不是,那么并不是所有的结果都在并且什么也不做。如果是,则触发主回调并将完整数据发送回主调用者。
if (responses.length >= information.length){
cb(responses);
}
举个例子:
getInformationResponses(information,console.log);
可以返回诸如以下内容:
"Feedback for 10 is: 10 is Even"
"Feedback for 12 is: 12 is Even"
"Feedback for 11 is: 11 is Odd"
[[object Object] {
num: 10,
response: "10 is Even"
}, [object Object] {
num: 12,
response: "12 is Even"
}, [object Object] {
num: 11,
response: "11 is Odd"
}]
本练习纯粹是为了探索如何处理异步调用,但在生产中效果不佳。此处未解决诸如错误处理(ajax 调用将失败)之类的问题。
正如 CallMeNorm 所提到的,promises可以很棒。我现在没有时间介绍它们。
关于javascript - 如何为对象数组运行 ajax?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37823381/
有人有 Comet 应用程序 .net 的任何样本吗? 我需要一个示例如何在服务器中保持客户端的连接? 最佳答案 这里也有一些不错的: http://www.frozenmountain.com/we
我想知道是否有 Yii2 专家可以帮助我了解如何最好地使用 ajax 表单与 Yii ajax 验证相结合。我想我可以在不带您阅读我所有代码的情况下解释这个问题。 我正在处理一个促销代码输入表单,用户
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度的了解。包括尝试的解决方案、为什么它们不起作用以及预期结果
f:ajax 和 a4j:ajax 标记之间有什么显着差异吗? 我知道 Richfaces 4 中的 a4j:ajax 基于 native f:ajax JSF2 标记,添加了一些 f:ajax 中未
我已经尝试过这样但无法获取数组列表。它返回“null” var data=[]; data[0] = '1'; data[1] = '2'; $.ajax({
在教程中可以看到 jQuery.ajax 和 $.ajax 喜欢这里 http://www.thekludge.com/form-auto-save-with-jquery-serialize/ jQ
过度使用 AJAX 会影响性能吗?在大型 Web 应用程序的上下文中,您如何处理 AJAX 请求以控制异步请求? 最佳答案 过度使用任何东西都会降低性能;在必要时使用 AJAX 将提高性能,特别是如果
似乎我无法使用 Ext.Ajax.request 进行跨域 ajax 调用。看起来 ScriptTag: True 没有任何效果。 这是我的代码: {
我正在使用 Bottle 微框架(但我怀疑我的问题来自它) 首先,如果我定义了一个从/test_redirect 到/x 的简单重定向,它会起作用。所以 Bottle redirect() 在简单的情
任何人都可以指出各种 AJAX 库的统一比较吗?我已经阅读了大约十几种不同的书,我即将开始一个项目,但我对自己是否已经探索了可能性的空间没有信心。 请注意,我不是在要求“我认为 XXX 很棒”——我正
似乎使用 AJAX 的站点和应用程序正在迅速增长。使用 AJAX 的主要原因之一可能是增强用户体验。我担心的是,仅仅因为项目可以使用 AJAX,并不意味着它应该。 可能是为了 UX,AJAX 向站点/
假设我有一个可以通过 Javascript 自定义的“报告”页面。假设我有可以更改的 start_date、end_date 和类型(“简单”或“完整”)。现在 我希望地址栏始终包含当前(自定义) V
我一直在阅读 Ajax 并且希望从 stackoverflow 社区看到我是否正确理解所有内容。 因此,正常的客户端服务器交互是用户在 url 中拉出 Web 浏览器类型,并将 HTTP 请求发送到服
这可能有点牵强,但让我们假设我们需要它以这种方式工作: 我在服务器的 web 根目录中有一个 index.html 文件。该文件中的 javascript 需要向/secure/ajax.php 发出
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它. 去年关闭。 Improve this
我希望ajax post成功进入主页。由于某种原因,我一直做错事。知道我应该做什么来解决这个问题吗? window.APP_ROOT_URL = ""; Ajax $.ajax({ url: '#{a
我在 2 个不同的函数中有 2 个 ajax 调用。我想用.click来调用这2个函数。 func1 将数据插入数据库,然后 func2 检索数据,所以我的问题是如何等到 func1 完全完成然后只执
我试图在单击按钮后禁用该按钮。我尝试过: $("#ajaxStart").click(function() { $("#ajaxStart").attr("disabled", true);
我试图在每个 Ajax 请求上显示加载动画/微调器 我的 application.js $(document).on("turbolinks:load", function() { window.
我正在显示使用jQplot监视数据的图形。 为了刷新保存该图的div,我每5秒调用一次ajax调用(请参见下面的JavaScript摘录)。 在服务器上,PHP脚本从数据库中检索数据。 成功后,将在5
我是一名优秀的程序员,十分优秀!