所以我目前正在尝试使用Jquery、curl、ajax和Google api实现货币转换脚本,但我遇到了一些问题。
下面是jquery+ajax
$(document).ready(function() {
$("#convert").click(function () {
var from = $("#from").val();
var to = $("#to").val();
var amount = $("#amount").val();
//Make data string
var dataString = "amount=" + amount + "&from=" + from + "&to=" + to;
$.ajax({
type: "POST",
url: "conversion.php",
data: dataString,
success: function(data){
$('#result').show();
//Put received response into result div
$('#result').html(data);
}
});
});
});
以下是我在conversion.php 中的内容
<?php
// sanitizing input using built in filter_input available from PHP 5.2
$amount = filter_input(INPUT_POST, 'amount', FILTER_VALIDATE_INT);
$from = filter_input(INPUT_POST, 'from', FILTER_SANITIZE_SPECIAL_CHARS);
$to = filter_input(INPUT_POST, 'to', FILTER_SANITIZE_SPECIAL_CHARS);
// building a parameter string for the query
$encoded_string = urlencode($amount) . urlencode($from) . '%3D%3F' . urlencode($to);
$url = 'http://www.google.com/ig/calculator?hl=en&amp;q=' . $encoded_string;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
$results = curl_exec($ch);
// this is json_decode function if you are having PHP < 5.2.0
// taken from php.net
$comment = false;
$out = '$x=';
for ($i=0; $i<strlen($results); $i++)
{
if (!$comment)
{
if ($results[$i] == '{') $out .= ' array(';
else if ($results[$i] == '}') $out .= ')';
else if ($results[$i] == ':') $out .= '=>';
else $out .= $results[$i];
}
else $out .= $results[$i];
if ($results[$i] == '"') $comment = !$comment;
}
// building an $x variable which contains decoded array
echo eval($out . ';');
echo $x['lhs'] . ' = ' . $x['rhs'];
现在的问题是,当我点击转换按钮时,它会在#resultsdiv中输出整个网页,而不是conversion.php 中的$x
我已经花了一整天的时间在这上面了,所以我们非常感谢您的帮助。
仅供参考-Curl已安装并正常工作
我不确定这是否是一个ussue,但构造URL以调用数据的方式是不正确的。你所拥有的是
$url = 'http://www.google.com/ig/calculator?hl=en&amp;q=' . $encoded_string;
这是不对的。注意&q
部分。您需要更改您的代码如下:
$url = 'http://www.google.com/ig/calculator?hl=en&q=' . $encoded_string;
不能肯定,但我不明白你为什么要回显eval($out.';')?只调用eval而不调用echo。
使用php对谷歌进行此调用的原因是由于跨域限制。但是,假设您正在服务器中加载json响应,则可以直接将json响应返回给jQuery。无需在服务器上对其进行解析。试试这个,让我们知道它是否有效:
<?php
// sanitizing input using built in filter_input available from PHP 5.2
$amount = filter_input(INPUT_POST, 'amount', FILTER_VALIDATE_INT);
$from = filter_input(INPUT_POST, 'from', FILTER_SANITIZE_SPECIAL_CHARS);
$to = filter_input(INPUT_POST, 'to', FILTER_SANITIZE_SPECIAL_CHARS);
// building a parameter string for the query
$encoded_string = urlencode($amount) . urlencode($from) . '%3D%3F' . urlencode($to);
$url = 'http://www.google.com/ig/calculator?hl=en&amp;q=' . $encoded_string;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
$results = curl_exec($ch);
header('Content-type: application/json');
echo $results;
// this should output the same data google sent, which is now in your domain so you get no cross domain errors
然后在jQuery中加载响应
$.ajax({
type: "POST",
url: "conversion.php",
data: dataString,
dataType:"json",
success: function(data){
// If I load this page http://www.google.com/ig/calculator?hl=en&q=1USD=?EUR
// I get {lhs: "1 U.S. dollar",rhs: "0.757174226 Euros",error: "",icc: true}
// Assuming your call is correct and you have the same response you can now
// access the data like so:
$('#result').show();
//Put received response into result div
$('#result').html(data.lhs + ' is equivalent to ' + data.rhs + ' Today');
}
});
我修复了以下问题,它在启用卷曲扩展的XAMPP 1.7.7上对我有效。
将查询更改为
$url = 'http://www.google.com/ig/calculator?hl=en&q=' . $encoded_string;
对每个键使用引号。
if (!$comment)
{
if ($results[$i] == '{') $out .= ' array('';
else if ($results[$i] == '}') $out .= ')';
else if ($results[$i] == ',') $out .= ','';
else if ($results[$i] == ':') $out .= ''=>';
else $out .= $results[$i];
}
如果#convert
是表单提交按钮,则阻止默认操作。
$("#convert").click(function (event) {
event.preventDefault();
var from = $("#from").val();
// ...
});
现在发布amount=3&from=EUR&to=USD
返回3 Euros = 3.9792 U.S. dollars
。
我是stackoverflow的新手,所以还不知道什么时候最好使用注释,新答案。。
但与此同时,经过深入研究,我发现了一个非常简单的PHP货币转换脚本:http://www.expertcore.org/viewtopic.php?f=67&t=2161
这正是我想要的,非常轻便,完全符合我项目的需求。。。也许这对其他人也有帮助。。。