我有这段代码:
$.post('http://localhost/test_zone/index.php/blog/new_post', { image_codes: images, info: fieldData, post_body: body },
function(data){
if (data.success) {
if(data.error != ''){
alert(data.error);
}
else {
$('#preview_wrapper').css('display','none').html(data.postHTML).show(1000);
$('#array_store').html(data.dataArray);
}
}
else {
alert('Sorry, an error occurred. No response from server.');
}
}
,'json');
正如你所看到的,我正在抓取两位数据 - postHTML& dataArray-通过ajax post函数。我想将dataArray放在var中。我已经阅读了类似的问题,我相信解决方案是使用'async:false' - 导致函数等待数据,并在继续之前将其插入var中。所以我有几个问题围绕着这个问题:
首先,如何使用简写的jquery $ .post设置'async:false',而不是$ .ajax({type:'POST'})?可能吗?这对我们来说很有用,但我无法解决或在任何地方找到答案。
我听过很多关于使用'async:false'的负面评论。你会推荐吗?如果没有,我怎样才能在页面上存储一些数据字符串供以后使用?目前您可以看到我已将数据设置为插入div(设置为display:none),这让我觉得不太理想,至少可以说。
为什么函数不等待数据插入到var中,但是当你将它设置为通过.html()将数据插入到页面上的元素时,它有效吗?我想这就像为数据字符串打开一扇门,只是在它自己的时间内溢出到页面中。?但是为什么这种方法不适用于将数据插入var-为什么门也不能对var保持开放? (如果你明白我的意思!)。
对一个相当冗长的问题抱歉 - 对上述各点的任何答案或部分答案都将非常感激。感谢。
编辑:这是我的完整代码(您可以忽略所有数据收集位,但无论如何我都会发布) - $('#submit').click(function(){
$('#input_table').hide(1000);
if($('.image_info').length){
var images = [];
$.each($('.image_info'), function(img_count) {
var img_code = $(this).attr('class').split(' ').slice(-1);
images.push('"' + img_count + '"' + ':' + '"' + img_code + '"');
img_count++;
});
images = '{' + images + '}';
}else {
var images = 'none';
}
var editor = CKEDITOR.instances.editor1;
var body = editor.getData();
body = clean(body);
var fieldData = [];
var cleanValue ='';
$.each($('.field'), function() {
cleanValue = clean($(this).val());
fieldData.push('"' + $(this).attr('id') + '"' + ':' + '"' + cleanValue + '"');
});
fieldData = '{' + fieldData + '}';
$.post('http://localhost/test_zone/index.php/blog/new_post', { image_codes: images, info: fieldData, post_body: body },
function(data){
if (data.success) {
if(data.error != ''){
alert(data.error);
}
else {
$('#preview_wrapper').css('display','none').html(data.postHTML).show(1000);
$('#array_store').html(data.dataArray);
}
}
else {
alert('Sorry, an error occurred. No response from server.');
}
}
,'json');
});
答案 0 :(得分:0)
您不应该使用异步,因为您的浏览器会挂起。 我用事件完成了这个:
var evObj;
var _EVENT_RESULT = "resultEvent";
// Listen to the event
evObj.bind(_EVENT_RESULT, function(event, data){
alert(data);
}
// Ajax-Request with event-triggering
$.ajax({
type: "POST",
...
success: function(data){
evObj.trigger(_EVENT_RESULT, data);
}
});
该函数没有等待,因为它是异步的。这很好,因为您的代码不会停止,您的浏览器也不会挂起。 如果使用“.html()”,则将结果插入到页面中,如果结果是从服务器发回的。可能是,你只是在“思考”这是有效的,因为结果很快就会被发送回来。但是如果你的服务器会在10秒后发回结果,那么你的页面就不会有10秒的结果 - 但是:你gui不会挂起。
编辑:试试这个:
var evObj;
var _EVENT_RESULT = "resultEvent";
// Listen to the event
evObj.bind(_EVENT_RESULT, function(event, data){
alert(data);
}
$('#submit').click(function(){
...
else{
...
$.post('http://localhost/test_zone/index.php/blog/new_post', {
image_codes: images,
info: fieldData,
post_body: body },
function(data){
if (data.success){
// At this point you could trigger the event
evObj.trigger(_EVENT_RESULT, data);
}
else{
alert('Sorry, an error occurred. No response from server.');
}
,'json');
});
答案 1 :(得分:0)
设置你的vars:
$.post('your_url', your_params,
function(data){
//Validation code here...
window.postHTML = data.postHTML;
window.dataArray = data.dataArray;
},'json');
现在您可以访问window.postHTML
和window.dataArray
全局变量。
要使$ .post同步(我不推荐),您只需使用$.ajaxSetup
一次:
$.ajaxSetup({ //This will change behavior of all subsequent ajax requests!!
async: false
});
$.post('http://localhost/test_zone/index.ph...) //Do $.post as usual
希望这有帮助