【问题标题】:JQuery Success/Failure Callback is not called不调用 JQuery 成功/失败回调
【发布时间】:2014-02-28 11:03:32
【问题描述】:

我是 jQuery 的新手。我需要在 jQuery 中实现的是调用一个用 Python 编写的 Web 服务,并根据我收到的消息显示适当的消息作为回报。 下面是我目前写的jQuery代码。

$(document).ready(function(){
$("#loginForm").submit( function () { 
    data = $(this).serialize()
    var serviceUrl = MyServiceUrl;
    $.ajax({
              type: "POST",
              url: serviceUrl,
              data: data,
              success:loginSuccess,
              failure: loginFailure
    });   
    return false;   
});
});

function loginSuccess(data){
    alert(data.status);
}
function loginFailure(data){
    alert(data.status);
}

在我提交表单时,在我的 HTML 表单上,我的呼叫转到了我的 Web 服务。但是在收到响应后,它不会像上面指定的那样转到我的成功或失败回调函数。下面是返回状态的 web 服务的 python 代码。它可以返回 case 1 或 case 2

案例一:

to_json = {"status": "success"}
return HttpResponse(simplejson.dumps(to_json), mimetype="application/json")

案例 2:

to_json = {"status": "error","message": str(e)}
return HttpResponseBadRequest(simplejson.dumps(to_json), mimetype="application/json")  

【问题讨论】:

  • 嗯,你应该调用类似:success:loginSuccess(data)?
  • 如果我这样做,它会在将请求发送到 Web 服务之前调用成功和失败函数。但是一旦收到响应,它就不会成功或失败。

标签: jquery python ajax web-services jquery-callback


【解决方案1】:

删除提交表单,仅使用 ajax

$(document).ready(function(){
   $("#your_button_id").click( function () { 
       data = $("#loginForm").serialize()
       var serviceUrl = MyServiceUrl;
       $.ajax({
          type: "POST",
          url: serviceUrl,
          data: data,
          success:loginSuccess(),
          failure: loginFailure()
       });   
       return false;   
   });
});

【讨论】:

  • 当你使用"$("#loginForm").submit"时,表示你的表单已经提交,因此,在它之后使用了ajax调用,你应该将你的按钮改为非提交
  • 当你使用我的答案时会发生什么?
  • 我现在正在尝试使用 firebug 调试代码。我收到以下异常 XMLHttpRequest cannot load ''。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问 Origin 'null'。
  • 尝试使用 dataType: 'json'
【解决方案2】:

这个问题是由于Cross-Origin XMLHttpRequest

以下是我的解决方案。

从 python 返回时,我添加了以下标题

to_json = {"status": "success"}
response = HttpResponse(simplejson.dumps(to_json), mimetype="application/json")
response['Access-Control-Allow-Origin'] = "*"
return response

HttpResponseBadRequest 也是如此。 所以最终的jQuery代码如下。

$(document).ready(function(){
$("#loginForm").submit( function () { 
    data = $(this).serialize()
    var serviceUrl = MyServiceUrl;
    $.ajax({
          type: "POST",
          url: serviceUrl,
          data: data,
          success:loginSuccess,
          error: loginFailure
    });   
    return false;   
 });
});

function loginSuccess(data){
    alert(data.status);
}
function loginFailure(data){
    alert(data.status);
}

我希望它真的对某人有所帮助..干杯

【讨论】:

    猜你喜欢
    • 2021-01-18
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    相关资源
    最近更新 更多