2012-01-10 162 views
1

我突然得到了一个非常奇怪的“错误”。到目前为止,这个脚本已经像一个魅力。但突然formData变量没有通过jQuery.ajax,就好像它不存在一样。奇怪的行为与jQuery.ajax

有趣的是,如果我触发alert显示数据,它都可以。但是,只要我删除警报,php脚本告诉我formData索引丢失。

我无言以对是什么原因导致这或如何解决这个问题: -/

这工作得很好我的开发服务器上,而不是在生产服务器上。

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' 
    }); 
}); 
+0

这是一个疯狂的猜测,但事实上它在dev上工作,但没有部署时,建议我在服务器上建立MIME类型的问题,你实际上是否返回有效的JSON?可能是在Firebug中的提琴手或NET标签。尝试添加一个错误:函数(e){}块,以及看看什么是包含在e上的服务器(再次,通过萤火虫 - 假设VS不可用) – SpaceBison 2012-01-10 11:05:35

+0

@SpaceBison - 谢谢。检查FF中的NET选项卡会告诉我所有的数据都是实际发送的!但是在被调用的PHP代码中执行'print_r($ _ REQUEST)'只显示'instance'和'brandID'。 – Steven 2012-01-10 11:43:51

+0

@SpaceBison,它不返回任何东西,因为PHP文件找不到'$ _REQUEST ['formData']'。 – Steven 2012-01-10 11:50:36

回答

0

尝试重新启动浏览器/更改浏览器到另一个,看看发生了什么,然后

+0

这是在两个不同的浏览器 – Steven 2012-01-10 11:05:21

1

我的猜测是,把在alert()允许form_databrand_id变量完全填满发送AJAX请求之前。考虑到这一点,试试这个:

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,看看是否有差别。

+0

相同Rory McCrossan,我已经尝试了你的解决方案,没有运气。该脚本在我的本地计算机和我的开发服务器上正常工作,但不在我的prod服务器上。在我修改了代码之前,我一直在努力,但是我没有更改这段代码。 – Steven 2012-01-10 11:39:44

+0

PS。看到我的评论@SpaceBison – Steven 2012-01-10 11:45:14

+0

我发现,如果我使用'serializearray'我没有得到这个错误。如果你有更好的提示,请告诉我: – Steven 2012-01-11 18:22:28

0

如果这是真的,你有一些比赛在这里(这是很奇怪的,因为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超时建设将使您的代码在执行队列的末尾。

+0

没有anny的效果。甚至将其设置为1000。 – Steven 2012-01-10 11:48:09