Php jQuery.ajax的奇怪行为
我突然发现了一个非常奇怪的“虫子”。到目前为止,这个剧本一直很有魅力。但是突然间,Php jQuery.ajax的奇怪行为,php,jquery,ajax,Php,Jquery,Ajax,我突然发现了一个非常奇怪的“虫子”。到目前为止,这个剧本一直很有魅力。但是突然间,formData变量没有通过jQuery.ajax,就好像它不存在一样 有趣的是,如果我触发一个显示数据的警报,一切都会正常。但是一旦我删除了警报,php脚本就会告诉我formDataindex丢失了 我不知道这是什么原因,也不知道如何解决:-/ 这在我的开发服务器上可以正常工作,但在生产服务器上不行 jQuery('#btn_saveForm').live('click', function() { va
formData
变量没有通过jQuery.ajax
,就好像它不存在一样
有趣的是,如果我触发一个显示数据的警报
,一切都会正常。但是一旦我删除了警报,php脚本就会告诉我formData
index丢失了
我不知道这是什么原因,也不知道如何解决:-/
这在我的开发服务器上可以正常工作,但在生产服务器上不行
jQuery('#btn_saveForm').live('click', function() {
var instance = 'update';
var brand_id = jQuery('#itemID').val();
// Get form data
var form_data = jQuery("#data_form").serialize();
// alert(form_data); //If I uncomment this, the script works...
//Process form data
jQuery.ajax({
url: siteURL +"/wp-content/themes/my_theme/include/jquery.php",
data: {
instance : instance,
formData : form_data,
brandID : brand_id
},
success: (function(feedback) {
showFeedback(feedback);
}),
dataType: 'json'
});
});
尝试重新启动浏览器/将浏览器更改为另一个浏览器,然后查看发生了什么尝试重新启动浏览器/将浏览器更改为另一个浏览器,然后查看发生了什么我猜应该是将
警报()
in允许在发送AJAX请求之前完全填充表单数据
和品牌id
变量。考虑到这一点,请尝试以下方法:
jQuery.ajax({
url: siteURL +"/wp-content/themes/my_theme/include/jquery.php",
data: {
instance : instance,
formData : jQuery("#data_form").serialize(),
brandID : jQuery('#itemID').val()
},
success: (function(feedback) {
showFeedback(feedback);
}),
dataType: 'json'
});
或者,为了进行测试,您可以在AJAX调用上设置
async:false
,看看这是否有区别。我的猜测是,将alert()
放入允许在发送AJAX请求之前完全填充表单数据
和品牌id
变量。考虑到这一点,请尝试以下方法:
jQuery.ajax({
url: siteURL +"/wp-content/themes/my_theme/include/jquery.php",
data: {
instance : instance,
formData : jQuery("#data_form").serialize(),
brandID : jQuery('#itemID').val()
},
success: (function(feedback) {
showFeedback(feedback);
}),
dataType: 'json'
});
或者,为了进行测试,您可以在AJAX调用上设置
async:false
,看看这是否有区别。如果您确实在这里有一些竞争(这很奇怪,因为js是单线程的),以下内容应该可以帮助您:
setTimeout(function() {
jQuery.ajax({
url: siteURL +"/wp-content/themes/my_theme/include/jquery.php",
data: {
instance : instance,
formData : form_data,
brandID : brand_id
},
success: (function(feedback) {
showFeedback(feedback);
}),
dataType: 'json'
})
}, 0);
0-timeout构造将把您的代码放在执行队列的末尾。如果您确实在这里有一些竞争(这将非常奇怪,因为js是单线程的),那么以下内容将帮助您:
setTimeout(function() {
jQuery.ajax({
url: siteURL +"/wp-content/themes/my_theme/include/jquery.php",
data: {
instance : instance,
formData : form_data,
brandID : brand_id
},
success: (function(feedback) {
showFeedback(feedback);
}),
dataType: 'json'
})
}, 0);
0-timeout构造将把代码放在执行队列的末尾。在两个不同的浏览器上是相同的在两个不同的浏览器上是相同的这有点胡乱猜测,但事实上它在dev上工作,但在部署时不工作,这向我暗示了在服务器上设置MIME类型的问题,您实际返回的是有效的JSON吗?可能是fiddler或Firebug中的NET选项卡。尝试添加一个错误:同时添加函数(e){}block,并查看服务器上e中包含的内容(同样,通过firebug-假定VS不可用)@SpaceBison-谢谢。检查FF中的“网络”选项卡会显示所有数据实际上都在发送!但是在被调用的PHP代码中执行
print\r($\u REQUEST)
只显示instance
和brandID
@SpaceBison,它不会返回任何内容,因为PHP文件找不到$\u REQUEST['formData']
@Steven你能在你的问题中发布Firebug看到的formData
变量的内容吗。@RoryMcCrossan-我刚刚发现了这个bug。我只在description字段中的文本长度超过20个字符时才会出现此错误……这有点胡乱猜测,但事实上它在dev上工作,但在部署时不工作,这向我表明在服务器上设置MIME类型有问题,您是否真的返回了有效的JSON?可能是fiddler或Firebug中的NET选项卡。尝试添加一个错误:同时添加函数(e){}block,并查看服务器上e中包含的内容(同样,通过firebug-假定VS不可用)@SpaceBison-谢谢。检查FF中的“网络”选项卡会显示所有数据实际上都在发送!但是在被调用的PHP代码中执行print\r($\u REQUEST)
只显示instance
和brandID
@SpaceBison,它不会返回任何内容,因为PHP文件找不到$\u REQUEST['formData']
@Steven你能在你的问题中发布Firebug看到的formData
变量的内容吗。@RoryMcCrossan-我刚刚发现了这个bug。我只有在“描述”字段中的文本超过20个字符时才会出现此错误……Rory McCrossan,我已经尝试了你的两种解决方案,运气不好。该脚本在本地计算机和dev服务器上运行良好,但在prod服务器上运行不好。在修改som代码之前,我一直在工作,但我没有修改这段代码。查看我对@SpaceBisonI的评论,我发现如果我使用serializearray
我不会得到这个错误。如果你还有什么好的建议,请告诉我:)罗里·麦克罗森,我已经尝试了你的两种解决方案,运气不好。该脚本在本地计算机和dev服务器上运行良好,但在prod服务器上运行不好。在修改som代码之前,我一直在工作,但我没有修改这段代码。查看我对@SpaceBisonI的评论,我发现如果我使用serializearray
我不会得到这个错误。如果你还有什么好的建议,让我知道:)那没有什么效果。甚至将其设置为1000。这并没有产生奇怪的效果。甚至设置为1000。