Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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
Jquery ui Jquery中出现插入元素过程错误_Jquery Ui_Jquery - Fatal编程技术网

Jquery ui Jquery中出现插入元素过程错误

Jquery ui Jquery中出现插入元素过程错误,jquery-ui,jquery,Jquery Ui,Jquery,我有以下HTML代码: <table class="viewTable"> <tr> <td>Price</td> </tr> </table> 我使用了Jade对这个问题的回答中的map函数: 我的问题要么是结果的显示,要么是过程本身不正确。首先插入价格行,然后插入总价行;相反,顺序是相反的,totalPrice出现在价格行的前面。当我在插入totalPrice之前插入一条警告语句时,它工作得很好。有什么

我有以下HTML代码:

<table class="viewTable">
  <tr>
    <td>Price</td>
  </tr>
</table>
我使用了Jade对这个问题的回答中的map函数:


我的问题要么是结果的显示,要么是过程本身不正确。首先插入价格行,然后插入总价行;相反,顺序是相反的,totalPrice出现在价格行的前面。当我在插入totalPrice之前插入一条警告语句时,它工作得很好。有什么建议吗?我的代码怎么了?jQuery是异步编译的吗?

Jep。Ajax调用是异步的,这意味着它们不会立即执行。您需要跟踪完成的ajax调用的数量,当所有调用都完成时,您可以追加总数

大概是这样的:

var totalPrice = 0;
var completedAjaxCalls = 0;
map.each(function(key , value , i) {
    params = {};
    params.id = key;
    // get datas from Controller class via ajax 
    ajax(url, params, false, function(result) {
        totalPrice += setData(result , key , value);
        completedAjaxCalls += 1;
        if(completedAjaxCalls == map.length) {
            $('table.viewTable tr:last').after("<tr class='title_bar'><td colspan='5' style='text-align: right;padding-right: 35px;'>"+num2Currency(totalPrice)+"</td></tr>"); 
        }
    });
});
var totalPrice=0;
var completedAjaxCalls=0;
映射每个(函数(键、值、i){
params={};
params.id=键;
//通过ajax从控制器类获取数据
ajax(url、参数、false、函数(结果){
totalPrice+=setData(结果、键、值);
completedAjaxCalls+=1;
if(completedAjaxCalls==map.length){
$('table.viewTable tr:last')。在(“+num2Currency(totalPrice)+”之后;
}
});
});

编辑:可能有更好的方法来实现这一点,但是由于您仍然需要掌握异步方法的概念,因此我认为一种简单的方法在这里是合适的

Jep。Ajax调用是异步的,这意味着它们不会立即执行。您需要跟踪完成的ajax调用的数量,当所有调用都完成时,您可以追加总数

大概是这样的:

var totalPrice = 0;
var completedAjaxCalls = 0;
map.each(function(key , value , i) {
    params = {};
    params.id = key;
    // get datas from Controller class via ajax 
    ajax(url, params, false, function(result) {
        totalPrice += setData(result , key , value);
        completedAjaxCalls += 1;
        if(completedAjaxCalls == map.length) {
            $('table.viewTable tr:last').after("<tr class='title_bar'><td colspan='5' style='text-align: right;padding-right: 35px;'>"+num2Currency(totalPrice)+"</td></tr>"); 
        }
    });
});
var totalPrice=0;
var completedAjaxCalls=0;
映射每个(函数(键、值、i){
params={};
params.id=键;
//通过ajax从控制器类获取数据
ajax(url、参数、false、函数(结果){
totalPrice+=setData(结果、键、值);
completedAjaxCalls+=1;
if(completedAjaxCalls==map.length){
$('table.viewTable tr:last')。在(“+num2Currency(totalPrice)+”之后;
}
});
});
编辑:可能有更好的方法来实现这一点,但是由于您仍然需要掌握异步方法的概念,因此我认为一种简单的方法在这里是合适的

你需要试一试

var totalPrice = 0;
var requests = [];
map.each(function(key, value, i) {
    params = {};
    params.id = key;
    // get datas from Controller class via ajax
    // make sure that `ajax()` return the promise returned by $.ajax()
    requests.push(ajax(url, params, false, function(result) {
        totalPrice += setData(result, key, value);
    }));
});
$.when.apply($, requests).done(function() {
    // alert("something!"); // this may satisfy my problem.. I have no idea..
    // Total Price show at last row
    $('table.viewTable tr:last')
    .after("<tr class='title_bar'><td colspan='5' style='text-align: right;padding-right: 35px;'>"
           + num2Currency(totalPrice) + "</td></tr>");
})
var totalPrice=0;
var请求=[];
映射每个(函数(键、值、i){
params={};
params.id=键;
//通过ajax从控制器类获取数据
//确保`ajax()`返回由$.ajax()返回的承诺
push(ajax(url、参数、false、函数(结果)){
totalPrice+=setData(结果、键、值);
}));
});
$.when.apply($,requests).done(函数(){
//警惕(“某物!”;//这也许能解决我的问题..我不知道。。
//最后一行显示的总价
$('table.viewTable tr:last')
.在(“”
+num2货币(总价)+”;
})
您需要试一试

var totalPrice = 0;
var requests = [];
map.each(function(key, value, i) {
    params = {};
    params.id = key;
    // get datas from Controller class via ajax
    // make sure that `ajax()` return the promise returned by $.ajax()
    requests.push(ajax(url, params, false, function(result) {
        totalPrice += setData(result, key, value);
    }));
});
$.when.apply($, requests).done(function() {
    // alert("something!"); // this may satisfy my problem.. I have no idea..
    // Total Price show at last row
    $('table.viewTable tr:last')
    .after("<tr class='title_bar'><td colspan='5' style='text-align: right;padding-right: 35px;'>"
           + num2Currency(totalPrice) + "</td></tr>");
})
var totalPrice=0;
var请求=[];
映射每个(函数(键、值、i){
params={};
params.id=键;
//通过ajax从控制器类获取数据
//确保`ajax()`返回由$.ajax()返回的承诺
push(ajax(url、参数、false、函数(结果)){
totalPrice+=setData(结果、键、值);
}));
});
$.when.apply($,requests).done(函数(){
//警惕(“某物!”;//这也许能解决我的问题..我不知道。。
//最后一行显示的总价
$('table.viewTable tr:last')
.在(“”
+num2货币(总价)+”;
})

您需要将其移至成功回调。AJAX是异步的。因此,
totalPrice
将在以后填充。但是ajax方法下面的语句将立即执行@Sushanth感谢您的回复。。请引导我作为答案。您想说在ajax函数中使用success:in吗?请描述我是如何做到的。你需要将其转化为成功。AJAX是异步的。因此,
totalPrice
将在以后填充。但是ajax方法下面的语句将立即执行@Sushanth感谢您的回复。。请引导我作为答案。您想说在ajax函数中使用success:in吗?请描述一下我是如何得到你描述的。。提前谢谢。通过(completedAjaxCalls==map.size())我得到了您描述的结果。。提前谢谢。好像(completedAjaxCalls==map.size())感谢您宝贵的时间。你的回答对我很有用。我也想接受你的回答。提前谢谢你。谢谢你宝贵的时间。你的回答对我很有用。我也想接受你的回答。先谢谢你。