Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将数据加载到jquery中的映射中的工作不一致_Javascript_Jquery_Ajax_Couchapp - Fatal编程技术网

Javascript 将数据加载到jquery中的映射中的工作不一致

Javascript 将数据加载到jquery中的映射中的工作不一致,javascript,jquery,ajax,couchapp,Javascript,Jquery,Ajax,Couchapp,在HTML方面: <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="viewport" content="width=device-width,initial-scale=1"> <meta ht

在HTML方面:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta http-equiv="Content-Language" content="en" />
<style>
p.serif{font-family:"Times New Roman",Times,serif;}
p.sansserif{font-family:Arial,Helvetica,sans-serif;}
</style>
<link rel="stylesheet" href="style/main.css" type="text/css">   
<title>PDS Jobs</title>
</head>
<script src="/_utils/script/sha1.js"></script>
<script src="/_utils/script/json2.js"></script>
<script src="/_utils/script/jquery.js"></script>
<script src="/_utils/script/jquery.couch.js"></script>
<script src="vendor/couchapp/jquery.couchLogin.js"></script>
<script src="vendor/couchapp/jquery.couchProfile.js"></script>
<script src="script/turboapp.js"></script>
用于获取存储在值中的选定键。对于这些键,来自视图的数据值应该存储在PMdata中。实际上,该代码连接了两个文档的数据。任何关于如何做到这一点的建议也将不胜感激

当我正常运行此操作时,在值中有两个条目,第一个警报的值1:undefined\n Values2:undefined\n,第二个警报的数据良好

当我在firefox调试器下运行它,并在警报处设置断点时,两个警报都显示了非常好的数据

发生了什么事

谢谢,
Gustavo Tellez

上述问题确实是由于db.view的异步操作造成的。正如我所知,最好的解决方案是将循环移动到success函数的末尾,如下所示:

    db.view("turbologviewer/pm", {
     reduce : false,
     success : function(data) {
     $(data.rows).each( function (index, item) {
       ...
       doWorkFunction(PMdata);
    });
    $(document).ajaxStop(function () { for (i in values) { ... } });

将添加一个新函数doWorkFunction。这将强制HTTP get数据处理之间的同步。在db.view之后键入的任何函数都将异步执行

事实证明,这个问题至少还有两种解决方案。两者都涉及在jQueryAjax调用完成后采取行动

第一种解决方案,将for循环移动到ajaxStop,如下所示:

    db.view("turbologviewer/pm", {
     reduce : false,
     success : function(data) {
     $(data.rows).each( function (index, item) {
       ...
       doWorkFunction(PMdata);
    });
    $(document).ajaxStop(function () { for (i in values) { ... } });
第二种方法是使用:

    $.when( db.view( ... ) ).then(function () { for (i in values) { ... } });

我不确定第二种方法是否有效,只是因为jQuery与couchapp版本不兼容。但原则上,这两种方法都可以工作。

如果db.view是一个异步函数,那么在ajax方法完成之前,您正在运行for循环,到第二次迭代时,它已经完成并最终加载了数据。我想可能是这样的!本机jquery能够将async:false添加到ajax方法中。我个人建议不要使用同步ajax方法,除非绝对必要,因为如果它们花费很长时间,它们会占用用户界面,看起来浏览器已经冻结。我建议使用回调方法或研究使用承诺。我对couchdb的了解还不够,不知道是否有一种方法可以设置一个同步的ajax调用,直接使用jquery和async重写代码:false有效。它现在使用:$.ajax{url:DATABASE+/\u design/turbologviewer/\u view/pm,async:false,success:…};我将如何使用回调方法编写代码?