jQuery и Ajax-скрипт не работают - PullRequest
0 голосов
/ 28 января 2012

, поэтому я сейчас пытаюсь реализовать скрипт конвертации валют с использованием 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;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'];

Теперь проблема в том, что, когда я нажимаю кнопку конвертирования, она выводит всю веб-страницу в div #results, а не $ x из translation.php

Я провел весь день на этом сейчас, поэтому любая помощь очень ценится.

FYI - Curl установлен и работает правильно

Ответы [ 4 ]

1 голос
/ 28 января 2012

Ну, я не уверен, является ли это проблемой, но способ, которым вы создаете URL для запроса данных, неверенТо, что у вас есть

$url = 'http://www.google.com/ig/calculator?hl=en&amp;amp;q=' . $encoded_string;

Это не правильно.Примечание &amp;q часть.Вам нужно изменить свой код следующим образом:

$url = 'http://www.google.com/ig/calculator?hl=en&q=' . $encoded_string;
0 голосов
/ 10 февраля 2012

Я новичок в stackoverflow, поэтому пока не знаю, когда лучше всего использовать комментарии, новые ответы ..

но в то же время после глубокого исследования я нашел очень простой скрипт конвертации валюты PHP по адресу: http://www.expertcore.org/viewtopic.php?f=67&t=2161

Это на самом деле именно то, что я искал, очень легкое и идеально подходит для нужд моего проекта ... может быть, это тоже кому-то поможет ...

0 голосов
/ 10 февраля 2012

Я исправил следующее, и это работает для меня на XAMPP 1.7.7 с включенным расширением curl.

Измените ваш запрос на

$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.

0 голосов
/ 28 января 2012

Не могу сказать точно, но я не понимаю, почему вы повторяете eval ($ out. ';')?Только звоните Eval без эха.

Причина использования php для звонка в Google связана с междоменными ограничениями.Но, учитывая, что вы загружаете ответ 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;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');
       }
     });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...