0

在我的距离/速率计算器(距离我使用谷歌地图)中,我实现了 AJAX,但出现错误白屏。

<?
session_start();
ob_start();
require_once("patch/require.php");
function curl_request($sURL,$sQueryString=null)
{
    $cURL=curl_init();
    curl_setopt($cURL,CURLOPT_URL,$sURL.'?'.$sQueryString);
    curl_setopt($cURL,CURLOPT_RETURNTRANSFER, TRUE);
    $cResponse=trim(curl_exec($cURL));
    curl_close($cURL);
    return $cResponse;
}
if(isset($_POST))
{
$dest= str_replace(',','',str_replace(' ','+',trim($_POST['to'])));
$origin =str_replace(',','',str_replace(' ','+',trim($_POST['from']))); 
$sResponse=curl_request('http://maps.googleapis.com/maps/api/distancematrix/json','origins='.$origin.'&destinations='.$dest.'&mode=driving&units=metric&sensor=false');
$oJSON=json_decode($sResponse);
if ($oJSON->status=='OK')
    $fDistanceInKM=(float)preg_replace('/[^\d\.]/','',$oJSON->rows[0]->elements[0]->distance->text);
else
    $fDistanceInKM=0;
      $oJSON->destination_addresses[0];
      $oJSON->origin_addresses[0];
    if(!isset($_SESSION['getTravel']))
    {
        $_SESSION['getTravel']=time();
    }
    $session_id=$_SESSION['getTravel'];
    $origin=mysql_real_escape_string($oJSON->origin_addresses[0]);
    $destination=mysql_real_escape_string($oJSON->destination_addresses[0]);
    $distance=mysql_real_escape_string($fDistanceInKM.PHP_EOL);
    $increase=(int)$_POST['inc'];
    $checkQ=mysql_query("select * from temp_travel where `session_id`='$session_id'")or die(mysql_error());
    $cms_distance_lower=number_format(Functions::getConf(3113),2);
    $cms_distance_upper=number_format(Functions::getConf(3116),2);
    $cms_lower_price=number_format(Functions::getConf(3111),2);
    $cms_between_price=number_format(Functions::getConf(3112),2);
    $cms_upper_price=number_format(Functions::getConf(3117),2);
    $cms_bag_price=number_format(Functions::getConf(3114),2);
    $cms_handcarry_price=number_format(Functions::getConf(3115),2);
    $distance=(int)$distance;
    if($distance<=$cms_distance_lower)
    {
        $pr=$cms_lower_price;
    }
    else if($distance>$cms_distance_lower && $distance<=$cms_distance_upper)
    {
        $pr=$cms_between_price;
    }
    else
    {
        $pr=$distance*$cms_upper_price;
    }

    if(mysql_num_rows($checkQ)>0)
    {
        $check=mysql_fetch_array($checkQ);
        $check_id=(int)$check['Id'];
        $passenger=$check['passenger'];
        if($passenger<4)
    {
        $hd=3;
        $bg=3;
    }
    else 
    {
        $pr+=($passenger-3)*8;
        if($passenger<6 )
        {
            $hd=3;
        }
        else
        {
            $hd=$passenger-2;
        }
        $bg=$passenger;
    }
        $handcarry=$check['handcarry'];
        $baggage=$check['baggage'];
        $price=number_format($pr+($cms_handcarry_price*($handcarry))+($cms_bag_price*($baggage))+$check['increase'],2);
        mysql_query("update temp_travel set `origin`='$origin',`destination`='$destination',`distance`='$distance',`increase`='$increase',`price`='$price' where `Id`='$check_id'")or die(mysql_error());
    }
    else
    {
        $price=number_format(($pr+$increase),2);
        mysql_query("insert into temp_travel (`session_id`,`origin`,`destination`,`distance`,`increase`,`price`,`handcarry`,`baggage`) values ('$session_id','$origin','$destination','$distance','$increase','$price','','')")or die(mysql_error());
    }

}           
        include('infotable.php');
?>

我正在将此页面的响应保存在 ajax 调用的 getValue 中,但收到有问题的错误。当我提交请求时,会出现一个空白页,但它什么也没做;不知道原因:

端口错误:无法建立连接。接收端不存在。

转到此链接http://www.airporttaxibooking.ca/并检查 RateCalculator。

这是我从中发送请求的 .js 文件:

$('#ptext').focus(function () { $('input:text[name=pearson-code]').val('');  });
$('#ptext').blur(function () {      
if($('input:text[name=pearson-code]').val()!='')
        {
        $('input:text[name=tpearson-code]').val('');
        $('.ptext').attr('disabled','true');
            var from= $('input:text[name=pearson-code]').val();
            var inc=$('input:radio[name=pdestination]:checked').val();  
            var to ="Mississauga, ON L4W 1S9, Canada";
            var data='from='+from+'&inc='+inc+'&to='+to;
            $.ajax({
            type: "POST",
            url: "distance.php",
            data: data,
            success: function(getValue) {
            $('#cbox-2').html(getValue);
        }
        });
    $('.ptext').removeAttr('disabled','true');      
        }
    return false;
});

这是 infotable.php 文件:

<?
include("patch/require.php");
if(isset($_SESSION['getTravel']))
{
    $session_id=$_SESSION['getTravel'];
    $travel_infoQ=mysql_query("select * from temp_travel where `session_id`='$session_id'")or die(mysql_error());
    if(mysql_num_rows($travel_infoQ)>0)
    {
        $travel_info=mysql_fetch_array($travel_infoQ);
        $destination=stripslashes($travel_info['destination']);
        $origin=stripslashes($travel_info['origin']);
        $distance=stripslashes($travel_info['distance']);
        $passenger=stripslashes($travel_info['passenger']);
        $handcarry=stripslashes($travel_info['handcarry']);
        $baggage=stripslashes($travel_info['baggage']);
        $increase=stripslashes($travel_info['increase']);
        $cms_distance_lower=Functions::getConf(3113);
        $cms_distance_upper=Functions::getConf(3116);
        $cms_lower_price=Functions::getConf(3111);
        $cms_between_price=Functions::getConf(3112);
        $cms_upper_price=Functions::getConf(3117);
        $cms_bag_price=Functions::getConf(3114);
        $cms_handcarry_price=Functions::getConf(3115);
        $distance=(int)$distance;
        if($distance<=$cms_distance_lower)
        {
            $pr=$cms_lower_price;
        }
        else if($distance>$cms_distance_lower && $distance<=$cms_distance_upper)
        {
            $pr=$cms_between_price;
        }
        else
        {
            $pr=$distance*$cms_upper_price;
        }


        if($passenger<4)
        {
            $hd=3;
            $bg=3;
        }
        else 
        {
            $pr+=($passenger-3)*8;
            if($passenger<6 )
            {
                $hd=3;
            }
            else
            {
                $hd=$passenger-2;
            }
            $bg=$passenger;
        }   
        $price=$pr+$cms_handcarry_price*($handcarry)+$cms_bag_price*($baggage)+$increase;
        mysql_query("update temp_travel set `price`='$price' where `session_id`='$session_id'");
    }
}
?>
<table border="0" width="100%" cellpadding="0" style="margin:0px; padding:0px;"   cellspacing="0">
    <tr>
        <td class="td" valign="top" width="35%" ><strong>From :</strong></td>
        <td class="td" valign="top"><? echo $destination; ?></td>
    </tr>
    <tr>
        <td class="td" valign="top"><strong>To :</strong> </td>
        <td class="td" valign="top"><? echo $origin; ?></td>
    </tr>
    <tr>
        <td class="td" valign="top"><strong>Passengers :</strong> </td>
        <td class="td" valign="top"><div id="passenger"><? echo $passenger; ?></div></td>
    </tr>
    <tr>
        <td class="td" colspan="2" style="text-align:center; background:#ffffff;" valign="top"><strong>Number of Baggages</strong> </td>

    </tr>
    <tr>
        <td class="td" valign="top"><strong>Large Baggages :</strong> </td>
        <td class="td" valign="top"><? if(!empty($baggage)){ echo '<div id="luggage2">'.$bg.'</div> <div id="baggage"> + '. $baggage.'</div>'; }else { echo $bg; } ?></td>
    </tr>
    <tr>
        <td class="td" valign="top"><strong>Hand Carries :</strong> </td>
        <td class="td" valign="top"><? if(!empty($handcarry)){ echo '<div id="luggage1">'.$hd.'</div> + <div id="baggage">'. $handcarry.'</div>';}else { echo $hd; } ?></td>
    </tr>       
    <tr>
        <td class="td" style="text-align:center" colspan="2"><strong >Price : $<div id="price"><? echo $price ?></div></strong></td>
    </tr>
    <tr>
        <td class="td" colspan="2" style="text-align:center;" align="center"><button id="button" onclick="document.location='<?=_WEB_URL?>bookingform.php'">Book Now</button></td>
    </tr>
</table>
4

1 回答 1

0

你有几个问题。您的直接错误是,当您输入邮政编码“123”并单击“刷新”时,AJAX 操作开始但您没有阻止事件冒泡到默认操作 - 即将表单提交给另一个页。因此,AJAX 操作经常(但不总是)终止,因为它的父页面正在重新加载——这取决于哪个先加载。(如果您的事件处理程序中有 JavaScript 错误,也可能发生这种情况)。

还有与单击单选按钮相关的 JS 错误。您使用的是开发人员工具栏吗?Safari 和 Chrome 有一个原生的,Firefox 有一个优秀的 Firebug 插件。这是您的 AJAX 调试工具包的重要组成部分,并且应该在屏幕上显示所有此类内容。

如果在 AJAX 请求之外查看,我注意到您的 AJAX 网址(此 GET此 POST)呈现整个页面。这使得单独测试变得更加困难 - 您应该能够在单独的浏览器窗口中加载它们并获得 JSON 答案。最后,除非 POST 操作更改了服务器上的某些内容,否则这也应该是 GET 操作。

于 2013-02-16T18:09:59.240 回答