【问题标题】:IE8 & 9 - no jquery ajax response objectIE8 & 9 - 没有 jquery ajax 响应对象
【发布时间】:2013-10-01 23:41:51
【问题描述】:

jquery 版本:http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js

    $.ajax({
        url: CI_ROOT + current_page + '/get_results' ,
        type: 'post',
        data: { 'primary_key': primary_key, 'search_category':search_category, 'sub_category': sub_category ,'search_page':search_page, 'search_order': search_order, 'project_type': project_type},
        beforeSend: function(){
            $('.browse-list').html(spinner);
            $('.page-number-nav').html('');
        },          
        success: function(r){
            var response_obj = jQuery.parseJSON(r.responseText);

            $('.browse-list').html('');

            if (response_obj.status == 'SUCCESS')
            {               
                $('#sort_menu').hide();
                $('#sort_type').hide();

                if ((response_obj.results != 'No results') && (search_category != 'group') && (search_category == 'title' || (primary_key > 0)))
                {
                    $('#sort_menu').show(); 
                    $('#sort_type').show();             
                }

                $('.browse-list').html(response_obj.results);
                $('.page-number-nav').html(response_obj.pagination);
            }
        }
    }); 

if (r.responseText == undefined){alert('Empty');} 对于 IE 8 和 9 返回 Empty,但适用于 IE10 和所有其他浏览器

我已经阅读并尝试了这里的所有帖子,我发现可能相关,无法理解为什么这只会对这两个浏览器造成炸弹,以及要检查什么

TIA!

【问题讨论】:

  • 你从服务器发回什么类型的内容?
  • json,通过:echo json_encode($retval);返回;对其他人有效

标签: javascript jquery internet-explorer-8 internet-explorer-9


【解决方案1】:

尝试像这样给你一个 ajax 调用 dataType

dataType: 'json'

所以它知道您期望什么样的数据。 您还应该在服务器的响应标头中将content type 作为application/json 返回 - 您的json_encode 方法只是将您的对象转换为JSON,但显然没有应用正确的标头(参考php.net

您需要添加:

header('Content-Type: application/json;charset=utf-8');

使用明确声明的dataType,应该不需要jQuery.ParseJSON,因为它会在调用success 处理程序之前对其进行转换,因此参数r 将是您期望的JSON :)

还只是一个注释(正如 OP 发现的那样)header 函数调用需要在您的 json_encode 调用之前

【讨论】:

  • 我已经尝试了这些变化,但会再试一次让你知道
  • 参数r是否包含任何信息?只是 responseText 没有通过吗?
  • 进行更改,并添加:alert(Object.keys(r));我看到它具有正常的响应对象属性,但没有 responseText 或我发回的任何其他内容
  • 看起来您的 header() 建议就是门票 - 只需将其放在我的代码中的正确位置即可。谢谢!
  • 这是常识,一旦我停下来思考:header() 进入我的后端函数,就在 json_encode() 行之前,所以返回被正确编码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
  • 2013-09-15
  • 1970-01-01
  • 2021-06-09
  • 1970-01-01
相关资源
最近更新 更多