【问题标题】:Ajax request returning whole page half the timeAjax 请求一半时间返回整个页面
【发布时间】: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 响应都将包含从 &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt; 到最后一行 &lt;/html&gt; 的整个 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


【解决方案1】:

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

php 是这样的:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多