200 /'parsererror'与jquery上ajax张贴到https

200 /'parsererror'与jquery上ajax张贴到https

问题描述:

我读过关于这个参数的其他问题的加载,但没有人能解决我的问题。 我以这种方式打电话给一个php页面。200 /'parsererror'与jquery上ajax张贴到https

$.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相同的服务器上,它工作正常。当我从本地主机启动它时,麻烦就开始了。 在这种情况下,我在xhr中收到以下内容: readyState=0, status=0, statusText="error"。 阅读关于这个话题的一些答案似乎是因为同源限制,所以我在呼叫中添加了一些参数。值得注意的是:

dataType:"jsonp", 
    crossDomain: true, 

显然这工作更好,因为现在我收到readyState=4, status=200, statusText="success"。麻烦是,textStatus="parsererror"。我也试过其他的东西,如jsonpCallback,cache,async,jsonp在许多配置没有运气。

现在,我收不到任何数据,因为这个调用只会给我一个我需要的cookie。

我的问题是:我是否正确地做事,对于初学者?在这两种情况下,这种错误的原因是什么?我称之为“https”/ POST的事实是否改变了一些东西,而不是简单的http/GET?

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

如果没有一个是正确的,那么正确的处理方式是什么?我无法触摸服务器,因此我仅限于客户端。

JSONP仅适用于JSON格式的数据!所以,如果你收到一个parseerror这意味着,你的PHP的输出可能不能很好地形成JSON

没有,它是不会轻易可以有XML作为响应JSONP调用..

+0

那么你会怎么样呢?任何方式来得到这个XML没有设置代理,你会知道吗? – Stephan 2012-04-19 12:54:39

+0

我承认文档说应该可以使用数据类型:“jsonp xml”。但文档也没有提供详细信息...甚至其他*主题没有涵盖它呢......有趣的 – devnull69 2012-04-19 13:05:46

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

因此,如果url(https://mydomain/page.php)没有响应JSON对象,您将得到解析错误,因为它试图解析它并失败。

+1

为什么文档然后说:_“作为jQuery 1.5,[...]你也可以使一个JSONP请求,将其作为文本接收,并且由jQuery将其解释为XML:“jsonp text xml”。类似地,诸如“jsonp xml”之类的简写字符串将首先尝试从jsonp转换为xml,如果失败,则从jsonp然后从文本到XML。“_ 如果我把'dataType:”jsonp文本“'它可以工作,因为它会把它当作文本,是正确的吗?不过,我仍然遇到同样的错误。 – Stephan 2012-04-19 12:57:48

+0

我不知道我们可以为jsonp使用多个dataType,刚学过它。但这似乎是不可能的,因为jsonp请求具有不同的请求类型。实际上我从来没有见过这样的简单工作。和一个建议 - >你可以使用[yql](http://developer.yahoo.com/yql/) – ocanal 2012-04-19 13:14:17