我已经读过很多关于这个论点的其他问题,但没有一个可以解决我的问题。 我以这种方式打电话给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"
。我还在许多配置中尝试了jsonpCallback
,cache
,async
,jsonp
等其他内容而没有运气。
现在,我没有收到任何数据,因为这个电话只会给我一个我需要的cookie。
我的问题是:对于初学者,我做得对吗?在这两种情况下,出现这种错误的原因是什么?我称之为'https'/ POST的事实是改变了什么,而不是简单的http / GET?
第二个问题是,稍后我将不得不通过soap请求调用一些web服务,这将以xml的形式返回数据。将使用相同的技术工作(假设jQuery文档很好,我可以编写dataType:"jsonp xml"
以便在运行中进行转换(并假设它也是正确的技术))?我认为它不会,因为jsonp期望callbackFN({...})
而不是xml,对吧?
如果这些都不正确,那么正确的方法是什么?我无法触摸服务器,因此我仅限于客户端。
答案 0 :(得分:2)
如果您将dataType
设置为JSONP
,则只能以JSON格式获取数据。
因此,如果url(https://mydomain/page.php)没有响应JSON对象,则会出现解析错误,因为它会尝试解析它并失败。
答案 1 :(得分:0)
JSONP仅适用于JSON格式数据!因此,如果您收到一个解析错误,这意味着您的PHP输出可能不是格式良好的JSON
不,不可能将XML作为对JSONP调用的响应。