如何在jquery中显示return对象的responseText

时间:2016-05-13 06:33:33

标签: jquery ajax

我有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?

4 个答案:

答案 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"]