我已经阅读了很多关于这个论点的其他问题,但没有一个可以解决我的问题。我以这种方式调用 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请求调用一些webservice,这将返回xml中的数据。使用同样的技术会起作用吗(假设 jQuery 文档很好,我可以写dataType:"jsonp xml"
它来动态转换它(假设它也是正确的技术))?我认为它不会是,因为 jsonp 期望在行callbackFN({...})
而不是 xml 上的东西,对吧?
如果这些都不正确,那么正确的方法是什么?我无法触摸服务器,因此我仅限于客户端。