在PHP中为HTML下拉列表设置XML响应格式



我有一个javascript onChange函数,它调用一个PHP文件来运行,获取UPS费率,并返回一个带有费率下拉列表的HTML更新。这一切我都做得很好,但现在我需要在比较的基础上向选项列表中添加一个项目。

Javascript:

function fetch_UPS(el){
var zip = el;
if (zip.length !== 5) {
alert ("Please enter a valid 5-digit US zip code.");
return false;
}
else {
var cartID = getCookie('cornerstoreid');
document.getElementById('blackoverlay').style.display = "block";
document.getElementById('pp_checkout').style.display = "none";
$.ajax({
type: 'GET',
cache: false,
url: 'fetch_rates.php',
data: { zip : zip, cartID : cartID },
success: function(response){
var droplist = document.getElementById("shipping_field");
var htmlchange = "<span class="cart_opt_label">Shipping: </span>" + response;
droplist.innerHTML = htmlchange;
document.getElementById('blackoverlay').style.display = "none";
document.getElementById('btn_sub_txt').innerHTML = '<input type="button" id="pp_checkout" value="" onclick="paypal_checkout_submit();" style="display:none;" />Please update shipping to continue';
}
});
}
}

返回的PHP(在返回之前删除所有位(

if ($response == false) {
throw new Exception ( "Bad data." );
} else {
// save request and response to file
$fw = fopen ( $outputFileName, 'w' );
fwrite ( $fw, $response );
fclose ( $fw );

// Load XML file
$xml = new DOMDocument;
$xml->load($outputFileName);
// Load XSL file
$xsl = new DOMDocument;
$xsl->load('style.xsl');
// Configure the transformer
$proc = new XSLTProcessor;
// Attach the xsl rules
$proc->importStyleSheet($xsl);
echo $proc->transformToXML($xml);
}

XSL样式表:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<select name="shipping_options" id="shipping_options">
<xsl:for-each select="/RatingServiceSelectionResponse/RatedShipment">
<xsl:choose>
<xsl:when test="Service/Code = 01">
<xsl:element name="option"><xsl:attribute name='value'>1!!!<xsl:value-of select="TotalCharges/MonetaryValue + 4"/></xsl:attribute>UPS Next Day Air - $<xsl:value-of select="format-number(TotalCharges/MonetaryValue + 4, '###,###.00')"/>
</xsl:element>
</xsl:when>
<xsl:when test="Service/Code = 02">
<xsl:element name="option">
<xsl:attribute name='value'>2!!!<xsl:value-of select="TotalCharges/MonetaryValue + 4"/></xsl:attribute>UPS 2nd Day Air - $<xsl:value-of select="format-number(TotalCharges/MonetaryValue + 4, '###,###.00')"/>
</xsl:element>
</xsl:when>         
<xsl:otherwise>
<xsl:element name="option">No Data</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
<option value='8!!!0.00'>Please call for freight pricing</option>
<option value='9!!!0.00'>Please call for international pricing</option>
</select>
</xsl:template>
</xsl:stylesheet> 

我尝试从XSL样式表中删除最后2个选项和关闭的select标记,并在echo之后添加

$closeTag = '<option value='8!!!0.00'>Please call for freight pricing</option>
<option value='9!!!0.00'>Please call for international pricing</option>
</select>';
if ($to_height > 0 && $to_height <= 2) {
echo $closeTag;
}
else {
echo $closeTag;
}

在测试中,我的IF语句只在返回的末尾添加一个字符串,但如果我试图从XSL中删除结束的select标记并将其添加到PHP文件中,它会删除格式化的返回,只返回IF语句之后的任何内容。

我不做太多的编码,由于通常有6个月到一年的时间,我经常落后于当前的编码要求。我确信我缺少一些XSL规则,但我已经尝试了我能想到的每一种搜索组合,但还没有想出任何解决方案。

我想明白了。

当我最初删除最后两个选项和结束标记时,我留在XSL样式表中的开始SELECT标记中。这导致样式表失败,因为它有一个没有结束标记的开始标记。一旦我从XSL样式表中删除了SELECT标记行,并对PHP进行了以下更改,一切就完美了。

这是对PHP:的更改

$openTag = '<select name="shipping_options" id="shipping_options">';
$closeTag = '<option value='8!!!0.00'>Please call for freight pricing</option>
<option value='9!!!0.00'>Please call for international pricing</option>
</select>';
....
else {
// save request and response to file
$fw = fopen ( $outputFileName, 'w' );
fwrite ( $fw, $response );
fclose ( $fw );

// Load XML file
$xml = new DOMDocument;
$xml->load($outputFileName);
// Load XSL file
$xsl = new DOMDocument;
$xsl->load('style.xsl');
// Configure the transformer
$proc = new XSLTProcessor;
// Attach the xsl rules
$proc->importStyleSheet($xsl);
echo $openTag;
echo $proc->transformToXML($xml);
if ($to_height > 0 && $to_height <= 2) {
echo $openTag . 'extra text here' . $closeTag;
}
else {
echo $openTag . $closeTag;
}
}

最新更新