2014-02-28 161 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