0

我正在使用 xampp 在我的本地机器上工作,并且所有其他 ajax 请求都运行得非常好而且很快。我当前的应用程序需要21 秒来加载 3.5 KB 的数据。

如果你问我,这有点慢。那么我的软件在做什么呢?

该软件有 4 个单选按钮。用户选择一个,然后创建一个 ajax 请求

var radio = $('input[name="selection"]:checked').val();
var hidden = $('#hiddenFive').val();
$.ajax
({  
    type: 'GET',
    url: 'curl.php',
    data: {type: radio, region: 'Hampshire', hidden: hidden},
    success: function(response, textStatus, XMLHttpRequest) 
    {
        var obj = jQuery.parseJSON(response);
        var strin = '';
        for(var i = 0; i < obj.length; i++)
        {
            strin += "<b>Name of " + radio + ": </b>" + obj[i].name + "<b> | Region: </b>" + obj[i].region + "<br>";    
        }
        $('#result').html(strin);
    },
    error: function(response, status, error)
    {
        alert("Error"); 
    }
}); 

数据被发送到 curl.php 站点,该站点向外部网站发送 curl 请求。我写了外部草书,因为它在同一个文件夹中,我们应该表现得像它是外部的,我们需要cURL来自它的数据(你知道的作业)

所以,现在,URL 看起来像这样

http://localhost/htmlAssignment/5/curl.php?type=town&region=Hampshire&hidden=hiddenFive

curl.php 将这些参数保存在变量中,然后将其发送到 web service.php

<?php
$type = $_GET['type'];
$region = $_GET['region'];
$hidden = $_GET['hidden'];
$url = "http://localhost/htmlAssignment/webservice.php?type=" . $type . "&region=" .$region. "&hidden=".$hidden;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$output = curl_exec($ch);
curl_close($ch); 
echo $output;
?>

webservice.php

检查隐藏值是否为 hiddenFive,什么是正确的,然后调用 db-function

if(isset($_GET['type']) && isset($_GET['region'])  && $_GET['hidden'] == 'hiddenFive')
{
    $array = array();
    $region = $_GET['region'];
    $type = $_GET['type'];
    $array = $db->getMultiDataPOI($type, $region);
    echo json_encode($array);           
}

我的 db 函数看起来像这样

function getMultiDataPOI($type, $region)
    {
        $getMultiSQL = "SELECT ID, name, type, country, region, lon, lat, description FROM pointsofinterest WHERE type = :type AND region = :region";
        $getMultiPrepare = $this->prepare($getMultiSQL);
        $getMultiPrepare->bindParam(':type', $type);
        $getMultiPrepare->bindParam(':region', $region);
        $getMultiPrepare->execute();
        $getMultiResult = $getMultiPrepare->fetchAll();
        return $getMultiResult;
    }

在这 20 秒之后,数据会正常显示并且应该正常显示,但需要 20 秒,如果你问我有什么奇怪的。这么长的时间这里可能是什么问题?正如我所说,我正在使用 xampp 和任何其他使用相同 web 服务加载的 AJAX 请求在 localhost 上工作。为什么这需要这么长时间?

如果 FireBug 有帮助,这里是一个屏幕。我希望你能读到它。

FireBugScreen of Request

4

1 回答 1

0

根据我的经验,我发现 localhost 经常会导致奇怪的行为,例如您所描述的。您是否只是尝试将 localhost 的引用更改为 127.0.0.1 并使用它?本地主机仍然必须进行名称查找,这有时可能从您的主机文件中不可靠,请参阅What is the difference between 127.0.0.1 and localhost

此外,我会尝试直接打开 PHP 服务文件,即您在 AJAX 中调用的文件,以确保它能够自行快速加载。由于它正在执行 SQL 查询,因此您的查询甚至您的 MySQL 配置可能会导致您出现一些滞后。

另一方面,我会谨慎使用您的 webserver.php 文件。您的所有请求数据都不会被过滤并直接进入您的数据库,这会使您的应用程序对 SQL 注入开放。

于 2013-04-23T11:28:22.390 回答