1

我已经阅读了很多关于这个论点的其他问题,但没有一个可以解决我的问题。我以这种方式调用 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 上的东西,对吧?

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

4

2 回答 2

2

如果设置dataTypeJSONP,则只能获取 JSON 格式的数据。

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

于 2012-04-19T12:54:20.813 回答
0

JSONP 仅适用于 JSON 格式的数据!因此,如果您收到一个 parseerror,这意味着您的 PHP 的输出可能不是格式正确的 JSON

不,将 XML 作为对 JSONP 调用的响应并不容易。

于 2012-04-19T12:53:16.390 回答