200 /'parsererror',jquery在ajax上发布到https

时间:2012-04-19 12:50:04

标签: javascript jquery ajax

我已经读过很多关于这个论点的其他问题,但没有一个可以解决我的问题。 我以这种方式打电话给php页面。

$.ajax({
        url: 'https://mydomain/page.php',
        type: "POST",
        data: { 
            "arg1": arg1,
            "arg2": arg2
        },
        success: function(data, textStatus, xhr) {
            //do stuff
        },
        error: function(xhr, textStatus) {
            alert("doLogin\n- readyState: "+xhr.readyState+"\n- status: "+xhr.status);
        }
    });

现在,如果我将这些东西放在与php相同的服务器上,它可以正常工作。当我从localhost启动时,麻烦就开始了。 在这种情况下,我在xhr中收到以下内容: readyState=0, status=0, statusText="error"。 由于相同来源的限制,读取关于该主题的一些答案,所以我在调用中添加了一些参数。值得注意的是:

   dataType:"jsonp",
   crossDomain: true,

显然这会更好,因为现在我收到了readyState=4, status=200, statusText="success"。麻烦的是textStatus="parsererror"。我还在许多配置中尝试了jsonpCallbackcacheasyncjsonp等其他内容而没有运气。

现在,我没有收到任何数据,因为这个电话只会给我一个我需要的cookie。

我的问题是:对于初学者,我做得对吗?在这两种情况下,出现这种错误的原因是什么?我称之为'https'/ POST的事实是改变了什么,而不是简单的http / GET?

第二个问题是,稍后我将不得不通过soap请求调用一些web服务,这将以xml的形式返回数据。将使用相同的技术工作(假设jQuery文档很好,我可以编写dataType:"jsonp xml"以便在运行中进行转换(并假设它也是正确的技术))?我认为它不会,因为jsonp期望callbackFN({...})而不是xml,对吧?

如果这些都不正确,那么正确的方法是什么?我无法触摸服务器,因此我仅限于客户端。

2 个答案:

答案 0 :(得分:2)

如果您将dataType设置为JSONP,则只能以JSON格式获取数据。

因此,如果url(https://mydomain/page.php)没有响应JSON对象,则会出现解析错误,因为它会尝试解析它并失败。

答案 1 :(得分:0)

JSONP仅适用于JSON格式数据!因此,如果您收到一个解析错误,这意味着您的PHP输出可能不是格式良好的JSON

不,不可能将XML作为对JSONP调用的响应。