2013-04-23 75 views
0

我正在使用xampp在本地计算机上工作,并且每个其他ajax请求的工作都非常快速。我目前的应用程序需要21秒加载3.5千字节的数据。与cURL和PHP结合的AJAX请求需要太长时间才能加载

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

该软件有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数据(你知道作业)

所以,现在的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

CHEC KS如果隐藏的价值是hiddenFive,什么是正确的,然后调用DB-功能

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);   
} 

我的数据库功能看起来像这样

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和其他任何使用相同webservice的AJAX请求即时加载localhost。为什么这需要这么长时间?

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

FireBugScreen of Request

+0

你有你的列被索引看起来像查询需要很长时间。 – 2013-04-23 11:21:05

+0

开始隔离自下而上。首先对最内层的功能(DB功能)进行基准测试,然后移动到web服务等等。这应该确切地指出慢度开始出现的位置。当你发现问题时,调试起来要容易得多 - 现在对我们来说这只是一个猜测游戏。 – 2013-04-23 11:22:00

+0

你为什么不直接打电话给你的web服务? – 2013-04-23 11:22:19

回答

0

只是从我的经验,我发现localhost来常引起奇怪的行为,如你描述。你是否简单地尝试将你的本地主机引用改为127.0.0.1并使用它?本地主机必须仍然做一个名称查找,这有时是不可靠的,从您的主机文件,请参阅What is the difference between 127.0.0.1 and localhost

另外我想尝试直接打开PHP服务文件,你在你的AJAX调用一个,以确保它自己加载速度很快。由于它正在执行一个SQL查询,因此可能会有一些与您的查询有关的内容,甚至可能是您的MySQL配置导致了一些滞后。

另一方面,我会谨慎使用您的webserver.php文件。您的所有请求数据都没有被过滤,直接进入您的数据库,从而导致您的应用程序打开SQL注入。

+0

您不必担心SQL注入。确实,我只是将get参数保存在变量中,但无论如何它们都被'bindParam'在数据库中转义。我已经将它改为127.0.0.1,但这没有什么区别。但是,谢谢! – devShuba 2013-04-23 11:35:40

相关问题