Ajax请求返回整个页面的一半时间

时间:2014-10-27 18:17:12

标签: javascript php jquery ajax session

我有一个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,但这并没有改变任何东西。我认为它必须是服务器端和会话处理的东西,但我真的很惊讶为什么这一直在发生并且不知道要测试/改变以便推进。

1 个答案:

答案 0 :(得分:0)

您的帖子请求的数据类型值看起来不正确。您应该修改您的php脚本以返回json格式的数据,并将数据类型更改为json。

这样的php:

$return_value = json_encode(array($service_nr, $service_city, $service_str));
echo $return_value;