我有Jquery代码
$('#add_companies').click( function(e) {
var form_id = '#'+ $(this).parents('form').attr('id');
var result = do_submit(form_id);
console.log(result);
});
代码从表单ID给出的表单中获取数据,并使用
进行提交do_submit()
do_submit()函数
function do_submit(form_id) {
var url = $(form_id).attr("action");
var ajax_result = false;
// Submit form using ajax
ajax_result = $.ajax({
type: "POST",
url: url,
data: $(form_id).serialize(),
dataType: 'json',
success: function(result) {
return result;
},
error: function(result) {
// code here
});
},
});
return ajax_result;
} // End do_submit()
成功提交后,它会使用此数据
返回存储在result
中的对象
Object {readyState: 1}
abort: function(a)
always: function()
complete: function()
done: function()
error: function()
fail: function()
getAllResponseHeaders: function()
getResponseHeader: function(a)
overrideMimeType: function(a)
pipe: function()
progress: function()
promise: function(a)
readyState: 4
responseJSON: 1
responseText: "1"
setRequestHeader: function(a,b)
state: function()
status: 200
statusCode: function(a)
statusText: "OK"
success: function()
then: function()
__proto__: Object
当我尝试以此格式获取result
responsetext的值时
result.responseText
控制台说
undefined
如何正确获取responseText?
答案 0 :(得分:1)
当return
来自do_submit
时,您的ajax仍处理,因为它是异步过程。这就是您console.log(result);
为空的原因。
相反,你可以调用一些在ajax完成后执行的函数:
-- do_submit--
$.ajax({
success: function (response) {
processSubmitResponse(response);
}
});
// here `response` is still null
----
// actual logic after submit of form.
// May be moved directly to anonymous function in `success`
function processSubmitResponse(response) {
console.log(result);
}
答案 1 :(得分:0)
您需要将callback
传递给do_submit
方法,如下所示:
......
do_submit(form_id, myCallback)
....
然后
function do_submit(form_id, myCallback) {
var url = $(form_id).attr("action");
var ajax_result = false;
// Submit form using ajax
$.ajax({ // AJAX is Async
type: "POST",
url: url,
data: $(form_id).serialize(),
dataType: 'json',
success: function(result) {
myCallback(result); // pass this result to your callback. Gets called when response is received with status : 200
},
error: function(result) {
// code here
},
});
}
回调中的:
function myCallback(res){
// console.log(res.responseText);
}
替代:使用jQuery promise
......
var ajaxCall = do_submit(form_id);
$.when(ajaxCall).done(function(response){
//console.log(response.responseText);
});
....
然后
function do_submit(form_id) {
var deferredObject = $.Deferred();
var url = $(form_id).attr("action");
var ajax_result = false;
// Submit form using ajax
$.ajax({ // AJAX is Async
type: "POST",
url: url,
data: $(form_id).serialize(),
dataType: 'json',
success: function(result) {
deferredObject.resolve(result); // resolves the promise
},
error: function(result) {
// code here
},
});
return deferredObject .promise(); // return promise immediately.
}
答案 2 :(得分:0)
function do_submit(form_id) {
var url = $(form_id).attr("action");
var ajax_result = false;
// Submit form using ajax
$.ajax({
type: "POST",
url: url,
data: $(form_id).serialize(),
dataType: 'json',
// http://stackoverflow.com/a/1478322/2240375
async: false,
success: function (result) {
return result;
},
error: function (result) {
// code here
return result;
}
});
} // End do_submit()
答案 3 :(得分:0)
我遇到了同样的问题,这对我有用。
result["responseText"]