[英]jQuery.ajax success callback function not executed
I have a JavaScript Ajax call (jQuery.ajax), that does not execute the success callback function. 我有一个JavaScript Ajax调用(jQuery.ajax),它不执行成功回调函数。
$.ajax({
url: target,
contentType: 'application/json; charset=utf-8',
type: 'POST',
// type: 'GET',
dataType: 'jsonp',
error: function (xhr, status) {
alert(status);
},
success: function (result) {
alert("Callback done!");
// grid.dataBind(result.results);
// grid.dataBind(result);
}
});
I see in firebug, that the request is posted and the correct result in terms of the json is returned as expected. 我在firebug中看到,请求已发布,并且按照预期返回了json方面的正确结果。 What is wrong?
怎么了?
For many times I have encountered similar problems and most of the time the reason was a malformed json. 很多时候我遇到过类似的问题,而且大部分时间都是因为json格式不正确。 Try getting the result as text data type to see whether this is your problem.
尝试将结果作为文本数据类型来查看这是否是您的问题。
Also, I'd like to ask if you're using a parameter like "&jsoncallback=?" 另外,我想问你是否使用像“&jsoncallback =?”这样的参数。 in your url, since your data type is jsonp instead of simple json.
在你的网址中,因为你的数据类型是jsonp而不是简单的json。
Your $.ajax
call with dataType: 'jsonp'
could work in these scenarios: 你的
$.ajax
调用dataType: 'jsonp'
可以在这些场景中工作:
If you are out of these two cases, you can't do anything since you can't make cross site XmlHttpRequest calls. 如果您处于这两种情况之外,则无法执行任何操作,因为您无法进行跨站点XmlHttpRequest调用。
This is an old question, but I suspect people still hit this. 这是一个古老的问题,但我怀疑人们仍然会这么做。
I fought this for some time, and eventually gave up and moved to the deferred model. 我打了一段时间,最终放弃并转移到延期模型。 (I've been using jQuery long enough that I was in the "old" way habits still...) As soon as I moved to a deferred model, things started to work.
(我一直在使用jQuery,以至于我仍处于“旧”的习惯......)一旦我转移到延迟模型,事情就开始起作用了。 I have no idea why the old way didn't work, but no longer care.
我不知道为什么旧方法不起作用,但不再关心。 (This question pre-dates the new model.)
(这个问题早于新模型。)
cf. 比照 https://stackoverflow.com/a/14754681/199172
https://stackoverflow.com/a/14754681/199172
You need to have set async property to false. 您需要将async属性设置为false。
$.ajax({
url: target,
contentType: 'application/json; charset=utf-8',
type: 'POST',
// type: 'GET',
dataType: 'jsonp',
async = false,
error: function (xhr, status) {
alert(status);
},
success: function (result) {
alert("Callback done!");
// grid.dataBind(result.results);
// grid.dataBind(result);
}
});
This just happened to one of my co-workers, so I figure I'd add my solution as well. 这恰好发生在我的一位同事身上,所以我想我也会添加我的解决方案。
We could see the ajax call being made, and could see the proper response coming back in Fiddler (status 200 / completely valid JSON), but it would never hit the error, success, or complete callbacks. 我们可以看到正在进行的ajax调用,并且可以看到Fiddler中返回的正确响应(状态200 /完全有效的JSON),但它永远不会出现错误,成功或完整的回调。 Adding async: false to the ajax call would make it work, but that wasn't really a proper solution.
在ajax调用中添加async:false会使其工作,但这不是一个真正合适的解决方案。 Additionally placing an alert directly after the ajax call (without the async: false), and waiting a few seconds once the alert was shown, would somehow force the ajax callbacks to work .
另外,在ajax调用之后直接发出警报(没有async:false),并在显示警报后等待几秒钟,会以某种方式强制ajax回调工作。 Very odd indeed...
确实很奇怪......
Turns out, the function with the ajax call was bound to an input of type="submit", which was the source of this odd behavior. 事实证明,带有ajax调用的函数被绑定到type =“submit”的输入,这是这种奇怪行为的来源。 Changing the input to type="button" corrected it.
将输入更改为type =“button”更正了它。
Jquery Ajax call to a servlet with mutliple parameters was not calling success or error even though the call was succesfull. Jquery Ajax调用具有mutliple参数的servlet,即使调用成功,也没有调用成功或错误。 It was bound to a submit button.
它被绑定到提交按钮。 Changing it returned a success event.
更改它返回了成功事件。
Here is my reference code in case someone needs it for reference. 这是我的参考代码,以防有人需要它作为参考。
$(document).ready( function () {
$("#buttonSave").click(function() {
alert('incustsave');
var name = $("#custname").val();
var gstnumber = $("#gstnumber").val();
var custbizname = $("#custbizname").val();
var email = $("#email").val();
var address = $("#address").val();
var street = $("#street").val();
var city = $("#city").val();
var zip = $("#zip").val();
var phone = $("#phone").val();
var country = $("#ctry").val();
var inputArray = [name, gstnumber, custbizname, email, address, street, city, zip, phone, country];
var Success = false;
alert('added_button_and_dt');
$.ajax({
type: "POST",
url: "RegisterCustomerServlet",
data: {'input': inputArray},
dataType: 'json',
success: function (data) {
alert('sucess');
},
error: function (e) {
alert('error');
}
});
});
});
HTML with Bootstrap3 (Button reference) 带Bootstrap3的HTML(按钮引用)
<!-- Button -->
<div class='wrapper text-center'>
<div class="btn-group">
<button type="button" id="buttonSave" class="btn btn-primary">Save</button>
</div>
</div>
Servlet Reference Servlet参考
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HashMap<String,String> map = new HashMap<String,String>();
CustomerDAO custinfo = new CustomerDAO();
Gson gson = new Gson();
CustomerVO vo = new CustomerVO();
String[] myJsonData = request.getParameterValues("input[]");
logger.info("in custregisterjsoninput" + myJsonData[0] + myJsonData[2] + myJsonData[3] + myJsonData[4]);
map.put("custname", myJsonData[0]);
map.put("getsnumber", myJsonData[1]);
map.put("custbizname", myJsonData[2]);
map.put("email", myJsonData[3]);
map.put("address", myJsonData[4]);
map.put("street", myJsonData[5]);
map.put("city", myJsonData[6]);
map.put("pincode", myJsonData[7]);
map.put("mainphone", myJsonData[8]);
map.put("country", myJsonData[9]);
try {
vo = custinfo.saveCustomerInfo(map);
} catch (Exception e) {
logger.info("aftercall"+e.getMessage());
throw new ServletException(e);
}
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(Utility.convertPOJOtoJason(vo));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.