嵌套的Ajax问题。 如何调试/解决?

关于嵌套的Ajax问题有很多post ,但我无法弄清楚我自己的错误。

我看到的问题是服务器端脚本没有在嵌套的Ajax调用中接收表单值。

在客户端,我得到result2为null。

嵌套的Ajax代码用// problem封装。

任何人都可以看到为什么嵌套的Ajax没有收到表单值?

 $(document).ready(function(){ $('form').live('submit', function(){ // ... $.ajax({ type: "GET", url: "/cgi-bin/ajax_confirm.pl", contentType: "application/json; charset=utf-8", dataType: "json", // async: false, data: $(this).serialize(), error: function(XMLHttpRequest, textStatus, errorThrown) { $('div#create_result').text("responseText: " + XMLHttpRequest.responseText + ", textStatus: " + textStatus + ", errorThrown: " + errorThrown); $('div#create_result').addClass("error"); alert("Error occured in ajax.js confirm code."); }, success: function(result){ if (result.error) { $('div#create_result').text("result.error: " + result.error); $('div#create_result').addClass("error"); } else { // server side script says everything is okay var users = $.parseJSON(result.users); var owners = $.parseJSON(result.owners); $("#dialog:ui-dialog").dialog("destroy"); $("#dialog-confirm").dialog({ resizable: false, height: 600, modal: true, open: function() { $(this).children('div.dialog-text').replaceWith("

Users

" + makeDialogTable(users) + "

Owners

" + makeDialogTable(owners)); }, buttons: { Okay: function() { $(this).dialog("close"); // problem $.ajax({ type: "GET", url: "/cgi-bin/ajax.pl", contentType: "application/json; charset=utf-8", dataType: "json", // generate and send parameters to server-side script data: $(this).serialize(), // script call was *not* successful error: function(XMLHttpRequest, textStatus, errorThrown) { $('div#create_result').text("responseText: " + XMLHttpRequest.responseText + ", textStatus: " + textStatus + ", errorThrown: " + errorThrown); $('div#create_result').addClass("error"); }, success: function(result2){ if (result2.error) { // script returned error $('div#create_result').text("result2.error: " + result2.error); $('div#create_result').addClass("error"); } else { // perl script says everything is okay $('div#create_result').text("result2.success: " + result.success + ", result2.id: " + result.id); $('div#create_result').addClass("success"); } //else } // success }); // ajax } else { // if (is_okay) { ... $('div#create_result').text("Fill out the form to create an activity"); $('div#create_result').addClass("error"); } // else }, // Okay // problem Cancel: function() { is_okay = 0; $(this).dialog("close"); } } // buttons }); // dialog } //else } // success }); // ajax // ...

更新这里是HTML,如图所示

                    



Individuel
Course

dialog text goes here

ID Title Owner Begin Date End Date Type
<input name="anchor" value="" type="hidden"> <tr id="" class="edit-row" style="display: none;">

在问题区域的这一行

 data: $(this).serialize(), 

“this”指的是对话本身或可能是ajax

您将要参考您尝试序列化的特定表单。

我会将值设置为变量并记录它以测试/看看那里发生了什么

所以先弄清楚是什么

  $(this) 

是通过运行

 alert($(this).prop('id')) // or something similar if your using older jQuery use .attr instead of .prop 

编辑它看起来不像你给表单ID,所以我不是100%肯定,但我认为你可以做到这一点

 $('form').live('submit', function(){ var aform = $(this) ..... 

然后在problam地区

  data: $(aform).serialize(), 
<input name="title" id="_title" value="" type="text" /> <input name="owner" id="_owner" value="" type="text" /> <input name="from" id="_begin_date" value="" type="text" class="datepick" /> <input name="to" id="_end_date" value="" type="text" class="datepick" /> <input name="ctype" value="individuel" type="radio" /> Individuel
<input name="ctype" value="course" type="radio" /> Course
<a href="javascript:showhide('');">Members
Users <input name="users" id="_users" size="35" value="" type="text" /> Groups <input name="groups" id="_groups" size="35" value="" type="text" />