2014-02-28 164 views
0

我是jQuery的新成员。我需要在jQuery中实现的是调用一个用Python编写的Web服务,并根据收到的消息显示相应的消息。 以下是我到目前为止写的jQuery代码。未调用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代码。它可以返回情况1或情况2

案例1:

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") 
+0

嗯,你应该叫是这样的:成功:loginSuccess(数据)? – brunozrk

+0

如果我这样做,它会在将请求发送到webservice之前调用成功和失败函数..但是一旦收到响应,就不会成功或失败。 – planet260

回答

0

这个问题是由于Cross-Origin XMLHttpRequest

以下是我的解决方案。

当从蟒返回我添加下列头

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); 
} 

我希望它确实有助于someone..Cheers

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; 
    }); 
}); 
+0

不能工作。我能问你如何得出这个结论吗? – planet260

+0

当你使用“$(”#loginForm“)。submit”时,这意味着你的表单被冒充了,因此,在它之后使用了ajax调用,你应该改变你的按钮来键入不提交 – brunozrk

+0

我没有工作。 .. – planet260