0

問題:

2つのフォーム値(最小/最大価格)を入力しても、表示されたクエリ結果は更新されません。最初に入力したとき、結果は正しく表示されますが、その後フォーム値が新しいパラメーターで変更された場合、これらのパラメーターを反映するようにhtmlコードは更新されません。

HTMLコード:

<input type="text" size="5" placeholder="Min. price" id="price_min">
<input type="text" size="5" placeholder="Max. price" id="price_max">
<input type="button" onclick="getHotelInfo()" value="Get" />
<div id="hotel_info"></div>             

JavaScriptコード:

function getHotelInfo() {
    $.get('hotelservice.php?priceMin=' + $('input#price_min').val() + '&priceMax=' + $('input#price_max').val(), function(data) {
        var hotelInfo = JSON.parse(data);
        content = '<table style="font-size:10px;width:100%;"><tr><th>Name</th><th>Stars</th><th>Price</th></tr>';
        for (var hotel=0; hotel<5;hotel++) 
        {
            content += '<tr><td><a href="' + hotelInfo[hotel].externalLink + '">' + hotelInfo[hotel].name +'</a></td><td><center>' + hotelInfo[hotel].stars + '</center></td><td><center>' + hotelInfo[hotel].price + '</center></td></tr>';
        }
        content += '</table>';
        $('#hotel_info').replaceWith(content);
    });
}

PHPコード:

$priceMin = $_GET['priceMin'];
$priceMax = $_GET['priceMax'];

$xml_source = file_get_contents('http://www.kayak.com/h/rss/hotelrss/SE/vaxjo?mc=EUR');
$xml = simplexml_load_string($xml_source);
$result = array();
foreach ($xml->channel->item as $item) {
    $kyk = $item->children('http://www.kayak.com/h/rss/hotelextension');
    $price = (int)$kyk->price;
    if ($price < $priceMax && $price > $priceMin) {
        $entry = new stdClass();
        $entry->name = (string)$item->title;
        $entry->externalLink = (string)$item->link;
        $entry->price = $price;
        $entry->stars = (int)$kyk->stars;
        $result[] = $entry;
    }
}
echo json_encode($result);

必要な出力: フォームの値が変更され、getHotelInfo()が呼び出されると、新しい結果が反映されます。

4

1 に答える 1

1

私はあなたのスクリプトをテストしましたが、問題は (私の簡単なテストから) PHP スクリプトが 5 つ未満の結果を返すことがありますが、それでも (for ループで) 5 つの結果を取得しようとすることです。これにより、スクリプトは存在しないオブジェクトのプロパティにアクセスし、エラーが発生してスクリプトが失敗します。したがって、何も更新されません。

とにかく、私はあなたのためにスクリプトを更新して、返されるデータが最大 5 または PHP スクリプトから返されるデータの長さになるようにしました。新しい JavaScript 関数は次のようになります。

function getHotelInfo() {
    $.get('test.php?priceMin=' + $('input#price_min').val() + '&priceMax=' + $('input#price_max').val(), function(data) {
        var hotelInfo = JSON.parse(data);
        var limit = hotelInfo.length > 5 ? 5 : hotelInfo.length;

        content = '<table style="font-size:10px;width:100%;"><tr><th>Name</th><th>Stars</th><th>Price</th></tr>';
        for (var hotel=0; hotel< limit;hotel++) 
        {
            content += '<tr><td><a href="' + hotelInfo[hotel].externalLink + '">' + hotelInfo[hotel].name +'</a></td><td><center>' + hotelInfo[hotel].stars + '</center></td><td><center>' + hotelInfo[hotel].price + '</center></td></tr>';
        }
        content += '</table>';
        $('#hotel_info').html(content);
    });
}

これで問題が解決することを願っています!

于 2012-12-02T10:02:24.453 に答える