我有一个HTML选择框,其中包含20个不同的数字代码(即" 123456790")作为选择选项,其中onChange触发器启动常规Ajax POST,应该设置文本对于特定的HTML元素。代码是这样的:
HTML
<select id="mtn_select" name="mtn_select" onChange="setDetailValues(this.value);">
<option value="0" selected>Please select</option>
<?
foreach ($servicearray as $serviceno => $element) {
echo '<option value="'. $serviceno .'">'. $serviceno .'</option>';
}
?>
</select>
JS
function setDetailValues(select_value) {
if (select_value == 0) {
$('#service_city').text('');
} else {
$.ajax({
type: 'POST',
url: 'modules/ajax_maintenance.php',
data: { servicenumber : select_value },
dataType: 'text',
success: function(return_data)
{
if (return_data) {
var myarr = return_data.split("|");
$('#service_city').text(myarr[1]);
} else {
$('#service_city').text('no data found');
}
},
error: function(return_data)
{
$('#service_city').text('an error occured');
}
});
PHP(ajax_maintenance.php目前有硬编码值)
<?
$service_nr = strtolower($_POST['servicenumber']);
$service_city = "New York";
$service_str = "Someplace 22a";
$return_value = "";
$return_value = $service_nr ."|". $service_city ."|". $service_str;
echo $return_value;
?>
现在这很简单,它按预期工作,但不幸的是仍然有一半的时间。当它工作时,XHR-POST响应(通过Firebug检查)将是&#34; 123456789 |纽约| Someplace 22a&#34;正如预期的那样,城市价值将会更新。
但是,每个其他POST回复都会包含<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
到最后一行</html>
的整个HTML网站代码。当发生这种情况时,ajax-call不会将其识别为错误或缺少数据,因此整个网站的HTML代码将位于&#34; return_data&#34;回调变量并打印在网站上,其中应显示城市价值。
这个东西被整合到的网站有点复杂,有很多(我不知道)php-includes,利用当前所选模块的GET参数(因此所有链接都指向带有不同参数的index.php)和当前用户的会话ID。起初我认为这可能是一个问题(由于身份验证/授权和SID),所以我手动将GET参数添加到我的ajax-POST,但这并没有改变任何东西。我认为它必须是服务器端和会话处理的东西,但我真的很惊讶为什么这一直在发生并且不知道要测试/改变以便推进。
答案 0 :(得分:0)
您的帖子请求的数据类型值看起来不正确。您应该修改您的php脚本以返回json格式的数据,并将数据类型更改为json。
这样的php:
$return_value = json_encode(array($service_nr, $service_city, $service_str));
echo $return_value;