【问题标题】:Receive serialized in php data by using ajax使用ajax接收序列化的php数据
【发布时间】:2012-02-02 08:18:15
【问题描述】:

我有一个 php 脚本,它返回序列化的 php 数据。我尝试使用 jQuery 1.7 中的 $.ajax() 方法接收这些数据。 Here 就是一个例子。

$.ajax({
    url: 'http://input.name/get.php?do=lookup' + '&domain=twittorama&tlds=.ru,.com,.net,.comf.ru',
    type: 'GET',
    dataType: 'text',
    cache: 'false',
    complete: function(res) {
        alert('COMPLETE() done');
        console.log(res);
    }
});

在控制台中我只看到

Object { readyState=0, status=0, statusText="error"}

那么,我做错了什么?你能帮帮我吗?

UPD

有趣的通知:如果我使用 JSONP dataType 请求可以接收数据,但不能处理它。 Here is an example.

$.ajax({
    url: 'http://input.name/get.php?do=lookup',
    data: 'domain=twittorama&tlds=.ru,.com,.net,.comf.ru',
    dataType: 'jsonp',
    cache: false,
    success: function(data) {
        alert("Data: "+data);
    },
    error: function(jqXHR, textStatus, errorThrown) {
        alert("Error: "+textStatus);
        console.log(jqXHR);
    }
});

【问题讨论】:

    标签: javascript jquery ajax deserialization


    【解决方案1】:

    而不是complete: 使用success: 然后res 将是您的ajax 请求返回的数据。

    记住也要使用error:,以防您调用时出现错误,因为您的控制台输出中似乎可能存在错误。

    代码:

    $.ajax({
        url: 'http://input.name/get.php?do=lookup',
        data: 'domain=twittorama&tlds=.ru,.com,.net,.comf.ru',
        cache: false,
        success: function(data) {
            alert("Data: "+data);
        },
        error: function(jqXHR, textStatus, errorThrown) {
            alert("Error: "+textStatus);
            console.log(jqXHR);
        }
    });
    

    【讨论】:

    【解决方案2】:

    响应是完整函数的第二个参数:

    $.ajax({
        url: 'http://input.name/get.php?do=lookup' + '&domain=twittorama&tlds=.ru,.com,.net,.comf.ru',
        type: 'GET',
        dataType: 'text',
        cache: 'false',
        complete: function(res,response) {
            alert('COMPLETE() done');
            console.log(response);
        }
    });
    

    更多信息:http://api.jquery.com/jQuery.ajax/

    您还应该考虑使用 JSON,而不是 php 序列化数据

    【讨论】:

    • 这里有一些问题 - input.name 是一个服务站点,它只提供 php 序列化的数据
    • 我看到了这个功能。但在处理这些数据之前,我应该从远程主机获取它。我尝试使用您的代码 - 它在控制台中记录“错误”。
    • 尝试使用浏览器控制台进行调试。您应该在 firebug 插件 (firefox) 或开发者控制台 (chrome) 中获得有关此请求的更多信息 - 还有关于每个 ajax 请求的详细信息
    • 可能是同源策略违规,但所有相关内容都应该在开发者控制台和调试信息中可见
    • 如果我使用 Chrome 的控制台并且如果我使用 'jsonp' dataType 我可以在其中看到我的数据。但 jquery 无法正确处理它 - 因为它不是 json 数据。因此,这意味着在这种情况下请求可以接收数据。但在使用“文本”数据类型时无法接收。这让我很困惑。
    【解决方案3】:

    您的代码可能没问题,但您试图违反same origin policy。基本上,如果你的网站是http://aaa.com/,你就不能让AJAX调用http://bbb.com/

    有几种解决方法:

    但大多数都要求双方都打得好。

    【讨论】:

    • 但如果是问题所在 - 为什么我没有收到来自 jQuery 的任何详细错误消息?
    • 我不确定你在期待什么,但 在我的 JS 控制台中确实看到了以下错误消息:XMLHttpRequest cannot load http://input.name/get.php?do=lookup&domain=twittorama&tlds=.ru,.com,.net,.comf.ru. Origin http://fiddle.jshell.net is not allowed by Access-Control-Allow-Origin.
    • 我已经更新了我的答案 - 在 dataType='jsonp' 的情况下请求可以接收数据...
    • 因为它不是 JSON。这就是我所说的双方“打得很好”的意思。
    • 我只想说,如果我在控制台中看到数据,这不是政策问题。所以,我不明白为什么我在使用 'text' dataType 时看不到数据并收到错误...
    猜你喜欢
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    相关资源
    最近更新 更多