我有功能和AJAX调用更新页面中的内容需要分开,但是在页面加载时,他们需要全部加载,因此我使用$ .when - 但是我理解在函数之间发送数据并使用$ .when是非常糟糕的 - 我已经研究了几种将AJAX调用结合起来的解决方案,并且这些解决方案对我来说似乎都失败了。这是我目前的解决方案:
- 我有2个函数运行独立的AJAX请求。
- 然后,我不过把这些从$。当
- 返回的数据,并以正确的JSON格式(上JSONlint验证) 通过。当$数据未设置/莫名其妙地丢失,在这一点上我传回时,不明白发生了什么。 我可以在AJAX函数中输出数据,但是如果我尝试从$ .when函数内或onload_sendData函数内输出,数据总是变成“未定义”。
我试过JSON.stringify,和JSON.parse都传递给一个函数之前和之后 - 没有什么区别,当我试图传递给下一个函数这种方式后,读它的数据总是会变得不确定。也许我错过了一些关于Javascript如何传递数据的基础知识,希望有人可以提供帮助。
function onload_Categories() {
$.ajax({
type: "GET",
url: '/index/categories',
ContentType : 'application/json',
success: function (data1) {
return data1;
},
error: function (jqXHR, textStatus, errorThrown) {
return errortThrown;
}
})
}
function onload_Subscribed() {
return $.ajax({
type: "GET",
url: '/index/getsubscribed',
ContentType : 'application/json',
success: function (data2) {
return data2;
},
error: function (jqXHR, textStatus, errorThrown) {
return errortThrown;
}
})
}
function onload_sendData(data1) {
alert(data1); // "UNDEFINED"
//processCategories(data1); // send data to populate the page categories
//processSubscribed(data2); // send data to populate the subscription data
}
(function($){
$(window).load(function(){
V1
$.when(onload_Categories(),onload_Subscribed()).then(onload_sendData);
V2
$.when(onload_Categories(),onload_Subscribed()).then(function(data1,data2){
alert(data1); // "UNDEFINED"
alert(JSON.parse(data1); // "UNDEFINED"
})
})
})
下面是从类别AJAX功能检索的JSON数据的一个片段:
> [{"categorytitle":"accessories","category_id":"56","parent":"7","count":0,"p_count":0,"ad_ids":0,"rem_ads_age":0,"rem_ads_loc":0,"hassub":0},{"categorytitle":"accessories","category_id":"64","parent":"9","count":0,"p_count":0,"ad_ids":0,"rem_ads_age":0,"rem_ads_loc":0,"hassub":0},{"categorytitle":"accessories","category_id":"72","parent":"11","count":0,"p_count":0,"ad_ids":0,"rem_ads_age":0,"rem_ads_loc":0,"hassub":0},{"categorytitle":"activities","category_id":"57","parent":"7","count":0,"p_count":0,"ad_ids":0,"rem_ads_age":0,"rem_ads_loc":0,"hassub":0},{"categorytitle":"activities","category_id":"81","parent":"15","count":0,"p_count":0,"ad_ids":0,"rem_ads_age":0,"rem_ads_loc":0,"hassub":0},{"categorytitle":"appliances","category_id":"83","parent":"16","count":0,"p_count":0,"ad_ids":0,"rem_ads_age":0,"rem_ads_loc":0,"hassub":0},{"categorytitle":"apps","category_id":"4","parent":"0","count":2,"p_count":2,"ad_ids":"25,27,","rem_ads_age":0,"rem_ads_loc":0,"hassub":0},{"categorytitle":"auto","category_id":"18","parent":"0","count":1,"p_count":3,"ad_ids":"27,","rem_ads_age":0,"rem_ads_loc":0,"hassub":1},{"categorytitle":"bags","category_id":"32","parent":"1","count":0,"p_count":0,"ad_ids":0,"rem_ads_age":0,"rem_ads_loc":0,"hassub":0},{"categorytitle":"belts","category_id":"25","parent":"1","count":0,"p_count":0,"ad_ids":0,"rem_ads_age":0,"rem_ads_loc":0,"hassub":0},{"categorytitle":"body
> care","category_id":"3","parent":"0","count":0,"p_count":1,"ad_ids":0,"rem_ads_age":0,"rem_ads_loc":0,"hassub":1},{"categorytitle":"body
> work and
> \n\nrepair","category_id":"101","parent":"18","count":0,"p_count":0,"ad_ids":0,"rem_ads_age":0,"rem_ads_loc":0,"hassub":0},{"categorytitle":"books","category_id":"39","parent":"2","count":0,"p_count":0,"ad_ids":0,"rem_ads_age":0,"rem_ads_loc":0,"hassub":0},{"categorytitle":"business","category_id":"19","parent":"0","count":0,"p_count":0,"ad_ids":0,"rem_ads_age":0,"rem_ads_loc":0,"hassub":0},{"categorytitle":"Business
> insurance","category_id":"110","parent":"105","count":0,"p_count":0,"ad_ids":0,"rem_ads_age":0,"rem_ads_loc":0,"hassub":0},{"categorytitle":"cafes","category_id":"58","parent":"8","count":0,"p_count":0,"ad_ids":0,"rem_ads_age":0,"rem_ads_loc":0,"hassub":0},{"categorytitle":"cameras","category_id":"88","parent":"16","count":0,"p_count":0,"ad_ids":0,"rem_ads_age":0,"rem_ads_loc":0,"hassub":0},{"categorytitle":"car
> hire","category_id":"99","parent":"18","count":1,"p_count":1,"ad_ids":"20,","rem_ads_age":0,"rem_ads_loc":0,"hassub":0},{"categorytitle":"cars","category_id":"98","parent":"18","count":1,"p_count":1,"ad_ids":"20,","rem_ads_age":0,"rem_ads_loc":0,"hassub":0},{"categorytitle":"computers","category_id":"86","parent":"16","count":0,"p_count":0,"ad_ids":0,"rem_ads_age":0,"rem_ads_loc":0,"hassub":0},{"categorytitle":"computers
> and
> tablets","category_id":"90","parent":"16","count":0,"p_count":0,"ad_ids":0,"rem_ads_age":0,"rem_ads_loc":0,"hassub":0},{"categorytitle":"consoles
> and
> \n\ngames","category_id":"89","parent":"16","count":0,"p_count":0,"ad_ids":0,"rem_ads_age":0,"rem_ads_loc":0,"hassub":0},{"categorytitle":"cruises","category_id":"63","parent":"9","count":0,"p_count":0,"ad_ids":0,"rem_ads_age":0,"rem_ads_loc":0,"hassub":0},{"categorytitle":"cufflinks","category_id":"27","parent":"1","count":0,"p_count":0,"ad_ids":0,"rem_ads_age":0,"rem_ads_loc":0,"hassub":0}]
而只是为了彻底,并为你的understan丁 - 以下是工作在传球数据功能之间:
function getCategories($c) {
$.when(
$.get('/index/categories')
).then(function(categories) {
processCategories(categories, $c);
});
}
function processCategories(categories, $c) {
var jsonData = JSON.parse(categories); // data OK
etc...
你需要从函数返回的承诺:'返回$阿贾克斯(...)' – Barmar 2015-02-24 17:11:00
你可能有说话从lamens的角度来说,我是一个完全新手......我尝试了这个,但仍然没有运气$。阿贾克斯({ 类型: “GET”, 网址: '/指数/类别', 的ContentType: '应用/ JSON', 成功:功能(数据1){ 回报$阿贾克斯(数据1); – Mike 2015-02-24 17:13:58
你已经带领我走向正确的方向我想我已经发现了你的意思,谢谢! – Mike 2015-02-24 17:17:37