表单数据json/ajax脚本不工作在新的服务器(windows到linux)


form data json/ajax script doesn't work on new server (windows to linux)

我正在将一个站点从Windows服务器移动到运行PHP 5.2.15的Linux服务器。

网站上有一个大型的应用表单,它使用javascript、jquery和ajax来验证/添加字段,使用json来编码/解码输入数据,使用PHP来发送电子邮件。

此表单在Windows帐户上运行良好。当我将它移动到我们的Linux服务器时,除了发送的电子邮件是空的之外,一切都正常。有一个PHP错误被打印出来并与电子邮件一起发送:警告:为/home/account/public_html/application/application_email中的foreach()提供了无效参数。TPL在第4行

文件的前几行如下:

<?php 
 $infoArr = get_object_vars( $info );
 foreach( $infoArr as $key=>$val ) {
    $parts = explode( "_", $key );
    $number = array_pop( $parts );
    if( count( $parts ) >= 1 && is_numeric( $number ) )
    {

对我来说,错误提示$info为空。php变量$info是在另一个名为submitApp.php的文件中创建的。该文件的前几行是:

<?php
 require_once( "emogrifier.php" );
 $info = json_decode( $_REQUEST['data'] );
 ob_start();
 require( "application_email.tpl" );
 $css = file_get_contents("application_email.css");
 $html = ob_get_contents();
 ob_end_clean();

所以,json_decode函数没有发生什么事情。在Firefox中使用Live HTTP头,我可以看到表单输入数据(通过POST)传递给submitApp.php。所以,我知道数据已经在那里了。下面是LiveHTTPheaders:

POST /~account/application/submitApp.php data=%7B%22name%22%3A%22Test+Name%22%2C%22address%22%3A%22111+Test+Street%22%2C%22city%22%3A%22Testville%22%2C%22state%22%3A%22NJ%22%2C%22zip%22%3A%2212121%22%2C%22email%22%3A%22test%40test.com%22%2C%22

等等

所以看起来好像json_decode不工作,因此没有把$_REQUEST['data']的内容放入变量$info

任何想法?我对php不陌生,但我对json, ajax和这个"emogrifier"很陌生。

谢谢!

我也有同样的问题。我的JSON在本地服务器上工作很好,这是窗口服务器,而我转换到Linux,我也遇到了同样的问题,在我尝试了获取数据的方法后,它工作得很好。我已经把json_decode($_REQUEST['json']换成了json_decode($_POST['json'],最后发现它在工作

好的,如果您认为$info为空,那么您应该测试这种情况,以便您可以优雅地处理它。下面这些可能看起来很简单,但我喜欢先排除最简单的解决方案,以确保我们正在以最困难的方式做事。因此,我喜欢在使用变量之前检查它们,因为我厌倦了NULL引用错误。

if( isset($info) )
{
  //... do something
}
else
{
  //... gracefully handle the error
}

对于json代码不工作的怀疑,您应该先测试$_REQUEST['DATA']变量:

if( isset($_REQUEST['data]) )
{
  // DEBUG -- attempt to view the data:
  print_r($_REQUEST['data']);
  // ... perform json extraction
}
else
{
  // ... handle the error gracefully
}

通常当你使用HTML表单元素时,数据是通过POST请求发送的。我知道GET/POST请求也结束在REQUEST超全局数组,但你可能想要验证你的数据是不是在POST数组…

让我们知道你的结果:)