2017-01-08 9 views
0

私はyahoo api servicecallを呼び出して、これらの値をテキストボックスに入れるコードを以下に示します。しかし、私はテキストボックスに値を取り込むことができません。以下は、私はすべてのエラーを取得する文句を言わないが、私はこの上でいくつかの基本的なthing.Anyのヘルプをしないのです知っているtextbox.Iにフェッチされた値を入れることができないのです上記のコードで私のコードJavaScriptのテキストボックスに値を設定することができません

<!DOCTYPE html> 
<html> 
<body> 
<p id="demo"></p> 
<form name="converter"> 
<table border="0"> 
<tr> 
<td><p class= "text_color">INR:</p> </td><td><input type="text" name="euro" onChange="euroConverter()" /></td> 
</tr> 
<tr> 
<td><p class= "text_color">US Dollar: </p></td><td><input type="text" name="dollar" onChange="dollarConverter()" /></td> 
</tr> 
<tr> 
<td colspan="4" align="center"><input type="button" value="Convert!" /></td> 
</tr> 
</table> 
</form> 
<script language="JavaScript"> 
    function getRate(from, to) { 
    var script = document.createElement('script'); 
    script.setAttribute('src', "http://query.yahooapis.com/v1/public/yql?q=select%20rate%2Cname%20from%20csv%20where%20url%3D'http%3A%2F%2Fdownload.finance.yahoo.com%2Fd%2Fquotes%3Fs%3D"+from+to+"%253DX%26f%3Dl1n'%20and%20columns%3D'rate%2Cname'&format=json&callback=parseExchangeRate"); 
    document.body.appendChild(script); 
    } 

    function parseExchangeRate(data) { 
    var name = data.query.results.row.name; 
    var rate = parseFloat(data.query.results.row.rate, 10); 
    } 

function euroConverter(){ 
document.getElementsByName('dollar').value = document.getElementsByName('euro').value * getRate("INR", "USD"); 
} 
</script> 

</body> 
</html> 

です。

+1

'* getRate'あなたのgetRate機能がないと、どのような状況の下で、また値 –

+2

を返すことができない、JSONPのためのあなたの' parseExchangeRate'コールバックとローカル変数への 'rate'はすぐに破棄されます。 –

+0

@Jaromanda Xはい、私はgetRate関数内の値のアラートしか見ることができません。だから私はこの値をテキストボックスに入れることができますか? – daisy

答えて

0

ここにあなたの関数の2の非常に簡単な(かつ単純化)の書き換えだ

function parseExchangeRate(data) { 
    var name = data.query.results.row.name; 
    var rate = parseFloat(data.query.results.row.rate, 10); 
    document.getElementsByName('dollar').value = document.getElementsByName('euro').value * rate; 
} 

function euroConverter() { 
    getRate("INR", "USD"); 
} 

これは、今あなたができるはずですので、私は、それは単純化だと言う

必要getRateを変更せずに、動作するはずです結果を「キャッシュ」し、すべての変更で交換レートを呼び出す必要はありませんが、このような最小限の変更で非同期JSONPデータを処理する方法を知る必要があります

0

これは単一のエレメン1要素の配列を返します。あなたはしかし、今、あなたはあなたがYahooのAPIが呼び出すために起こっている

dollarTextbox.value = '0'; 

それに必要な値を置くことができるテキストボックスを持っていることを最初の要素

var dollarTextbox = document.getElementsByName('dollar')[0]; 

をつかむことができ

document.getElementsByName('dollar') 

あなたの関数parseExchangeRateこの関数の中に値を代入する必要があります。

function parseExchangeRate(data) { 
    var name = data.query.results.row.name; 
    var rate = parseFloat(data.query.results.row.rate, 10); 

    var dollarTextbox = document.getElementsByName('dollar')[0]; 
    var euroTextbox = document.getElementsByName('euro')[0]; 

    dollarTextbox.value = euroTextbox.value * rate; 
} 
0

ajax呼び出しを使用して、yahooサーバーから日付を取得できます。 getRate`は `NAME`を抽出し`に

function getRate(from, to, callback) { 
 

 
     var url = "http://query.yahooapis.com/v1/public/yql?q=select%20rate%2Cname%20from%20csv%20where%20url%3D'http%3A%2F%2Fdownload.finance.yahoo.com%2Fd%2Fquotes%3Fs%3D" + from + to + "%253DX%26f%3Dl1n'%20and%20columns%3D'rate%2Cname'&format=json" 
 
     callAjax(url, callback); 
 
    } 
 

 
    function parseExchangeRate(data) { 
 
     var name = data.query.results.row.name; 
 
     var rate = parseFloat(data.query.results.row.rate, 10); 
 
    } 
 

 
    function callAjax(url, callback) { 
 
     var xmlhttp; 
 
     // compatible with IE7+, Firefox, Chrome, Opera, Safari 
 
     xmlhttp = new XMLHttpRequest(); 
 
     xmlhttp.onreadystatechange = function() { 
 
     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
 
      callback(xmlhttp.responseText); 
 
     } 
 
     } 
 
     xmlhttp.open("GET", url, true); 
 
     xmlhttp.send(); 
 
    } 
 

 
    function euroConverter() { 
 
     getRate("INR", "USD", function(data) { 
 
     var dataObj = JSON.parse(data); 
 
     var name = dataObj.query.results.row.name; 
 
     var rate = parseFloat(dataObj.query.results.row.rate, 10); 
 
     document.getElementsByName('dollar')[0].value = document.getElementsByName('euro')[0].value * rate; 
 
     }); 
 
    } 
 

 
    function dollarConverter() { 
 
     getRate("USD", "INR", function(data) { 
 
     var dataObj = JSON.parse(data); 
 
     var name = dataObj.query.results.row.name; 
 
     var rate = parseFloat(dataObj.query.results.row.rate, 10); 
 
     document.getElementsByName('euro')[0].value = document.getElementsByName('dollar')[0].value * rate; 
 
     }); 
 
    }
<p id="demo"></p> 
 
    <form name="converter"> 
 
    <table border="0"> 
 
     <tr> 
 
     <td> 
 
      <p class="text_color">INR:</p> 
 
     </td> 
 
     <td> 
 
      <input type="text" name="euro" onChange="euroConverter()" /> 
 
     </td> 
 
     </tr> 
 
     <tr> 
 
     <td> 
 
      <p class="text_color">US Dollar: </p> 
 
     </td> 
 
     <td> 
 
      <input type="text" name="dollar" onChange="dollarConverter()" /> 
 
     </td> 
 
     </tr> 
 
     <tr> 
 
     <td colspan="4" align="center"> 
 
      <input type="button" value="Convert!" /> 
 
     </td> 
 
     </tr> 
 
    </table> 
 
    </form>

関連する問題