下面是我正在处理的jquery脚本,我已经删除了它的所有不相关部分。
你可以看到有一个ajax调用,结果有一个if语句,其他项目我们被剥离但是无论如何,验证码是从第一个ajax调用的结果中挑选出来的。
然后我需要进行第二次ajax调用,这是我的麻烦所在,我没有错误,但它似乎没有在第二次返回响应,我错过了什么?
<script type="text/javascript">
$(document).ready(function() {
// make ajax call
var dataString = 'comment=' + comment;
$.ajax({
type: "POST",
url: "process.php",
data: dataString,
dataType: "json",
success: function(data) {
//result from 1st ajax call returns "captcha"
if (data.response === 'captcha') {
//a bunch of code is ran
////////////////////////
//then...
$().bind('cbox_closed', function() {
var dataString2 = 'comment=' + comment + '&run=captchagood';
// our nested ajax call
// this is the part that is having trouble =(
$.ajax({
type: "POST",
url: "process.php",
data2: dataString2,
dataType: "json",
success: function(data2) {
if (data2.response === 'captchagood') {
alert('test');
$('div#loader').find('img.load-gif').remove();
$('div#loader').append('<span class="success">Thanks for your comment!</span>');
$('div#loader').hide().fadeIn('slow');
$('span.limit').remove();
$('div#comments').append(data);
$('div#comments div.comment-unapproved:nth-child(1)').hide().slideDown('slow');
$('input#submit-comment').unbind('click').click(function() {
return false;
});
// success append the sanitized-comment to the page
$('#comments').prepend(data.comment);
};
// end captcha status returned
}
});
});
};
return false;
});
});
});
</script>
答案 0 :(得分:12)
在ajax回调中进行ajax调用没有错。事实上,你甚至没有这样做,你在这里做的是:
要检查的一些事项:
服务器是否成功返回? (没有404,500错误等)
你期待一个json的回应。它是否包含您要检查的{response:'captcha}等数据?
什么时候触发了cbox_closed事件?你确定它正在发生吗?
答案 1 :(得分:3)
你已经将'success'回调传递给jQuery,但没有'错误'回调。这样你就忽略了这个错误。以下是捕获错误的示例,并可选择将其显示在Firebug控制台中。
var lastRequest = jQuery.ajax( { type: "POST"
, url: this._ajaxUrl
, data: postdata
, dataType: "json"
, success: _gotAjaxResponse
, error: _gotAjaxError
} );
function _gotAjaxResponse( data )
{
window.console && console.log( data );
}
function _gotAjaxError(xhr, status, error)
{
// Show server script errors in the console.
if( xhr.status == 500 )
{
var response = xhr.responseText;
response = response.replace( /\r?\n/g, "" )
.replace( /(<\/)/g, "\n$1" )
.replace( /<[^>]+>/g, "" )
.replace( /^\s+/, "" )
.replace( /\s+$/, "" );
window.console && console.error(response);
}
alert("I'm sorry...\n\n"
+ "Unfortunately an error occured while communicating with the server.\n"
+ "Please try again later.");
}