【发布时间】:2014-10-27 18:17:12
【问题描述】:
我有一个 HTML 选择框,其中包含大约 20 个不同的数字代码(即“123456790”)作为选择选项,带有一个启动常规 Ajax POST 的 onChange 触发器,它应该为特定的 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 检查)将是“123456789|New York|Someplace 22a”,正如预期的那样,并且城市值将更新得很好。
但所有其他 POST 响应都将包含从 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 到最后一行 </html> 的整个 HTML 网站代码。发生这种情况时,ajax 调用不会将其识别为错误或丢失数据,因此整个网站的 HTML 代码将位于“return_data”回调变量中并打印在网站上,其中城市值应该是出现。
这个东西被集成到的网站有点复杂,有很多(我不知道)php-includes,对当前选择的模块使用 GET 参数(所以所有链接都指向具有不同参数的 index.php)和当前用户的会话 ID。起初我认为这可能是一个问题(由于身份验证/授权的东西和 SID)所以我手动将 GET 参数添加到我的 ajax-POST 中,但这并没有改变任何东西。我认为它必须是服务器端的东西和会话处理,但我真的很惊讶为什么这不会一直发生,并且不知道为了推进而测试/更改什么。
【问题讨论】:
-
只是一个建议,将数据返回为json,这样你就不必做所有的拆分业务。这听起来像 ajax 请求可能会返回一个错误页面,因为 ajax_maintenance.php 并没有真正的 标签或任何东西。请粘贴整个返回的 html。
-
是的,使用 JSON,它非常适合这个。至于您的问题,下次遇到失败时,请检查 Firebug 中传出请求的请求参数。我怀疑你会在那里看到一些意想不到的东西。
-
是我还是.php文件不正确?它没有正确的开始标签,这可能会导致错误(除非启用短标签)。
标签: javascript php jquery ajax session