【问题标题】:jQuery Ajax Response: Works in Browser, Null on Mobile DevicejQuery Ajax 响应:在浏览器中工作,在移动设备上为 Null
【发布时间】:2011-03-22 19:41:45
【问题描述】:

第一篇文章在这里。我有一个我认为与安全相关的问题,但老实说我不确定。

我正在使用 PhoneGap(基本上是一个带有 jQ​​uery/CSS 的 HTML 页面)构建一个移动应用程序。我要调用 .asmx 网络服务,如下所示:

$.ajax({ 
    type: "POST", 
    url: "http://mydomain.com/customPage.asmx/LoginMember", 
    data: memberData, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
            alert("This is my message: " + msg); 
    }, 
    error: authenticateFailed 
    }); 

当我使用我的桌面(Mac、Safari)对此进行测试时,调用成功。我的“msg”变量包含一些字符串格式的 XML。都好。这是调用成功且数据存在时我的警报显示的内容:

<User><Membership><Item>MemberLoginStatus</Item><Type>XML</Type><Status>1</Status><Description>Succeeded</Description></Membership></User>

但是当我使用相同的代码并将其移动到我的设备(iPhone、PhoneGap)上时,会发生其他事情。调用仍然成功,并且我的成功函数触发,但我的“msg”变量没有数据。我收到此警报:“这是我的消息:null”

我已尝试对此进行研究,但似乎无法确定问题的实际根源。我不认为这是我的代码,但不确定是 jQuery、PhoneGap 还是其他问题。

到目前为止,我最好的猜测是这是某种安全问题。我注意到,当我在 Chrome 中进行测试时,我得到的响应与我在设备上所做的相同。这可能是由于“同源政策”造成的吗?

我已经尝试将我的问题发布到 PhoneGap Google Group、jQuery 论坛,但并没有得到太多的爱。我将不胜感激任何想法/建议,并希望这里的其他人以前遇到过这种行为。

谢谢! -费利克斯

//编辑:修正 url 拼写错误。添加成功响应数据。

【问题讨论】:

  • 这可能不是安全问题,因为如果是这样,它就不会执行您的success 函数,但当然您可能想从url 中取出“mydomain.com”并进行测试以防万一。我很困惑为什么要将msg 作为json 对象返回到字符串中,但是...然后您说您说它包含一些“ XML”...:-/
  • 嗨 Haochi - url 必须是绝对的,因为这最终将是一个独立的应用程序。我添加了“msg”变量,以便查看返回的数据。
  • 您能否更新您的帖子以包含返回值?
  • 更新了!我正在访问网络服务并使用提供的文档。虽然我的 dataType 是 JSON,但我得到的实际上是一个字符串格式的 XML。仅供参考,我尝试将 dataType 更改为各种内容(html、文本、xml、脚本),但没有成功。
  • 嗯,你应该转换你的输出服务器端。简单地告诉 jQuery 你想要 JSON 格式并不会神奇地输出 JSON。

标签: jquery ajax


【解决方案1】:

好吧,问题是我是个白痴。我正在测试的域是一个子域,最重要的是......它不是一个公共站点。我在我的机器上的 hosts 文件中有 IP 地址,但(当然)在我的 iPhone 上没有。

当我尝试在我们这里的其他/公共网站上进行测试时...我现在在我的设备上看到了数据。

非常感谢 Haochi 和 typeof 的及时和多次回复。在我发布问题的所有其他网站中,你们发布一些想法的速度非常快。尤其是 typeof 关于域的问题让我思考并意识到错误来自哪里。

我现在觉得我一直在试图用我的钥匙进入我的房子......而且我一直站在错误的房子前面。莫名的尴尬。但我现在看到了数据,这才是最重要的。

再次感谢!

【讨论】:

  • 我还没到那里(11 岁,需要 15 个代表)。但是当我有能力时会回来并这样做。仍然在这里学习绳索,但非常享受站点界面和站点成员的帮助。再次感谢!
【解决方案2】:

在您的代码中,您缺少 url 属性的乞求报价。

假设这只是一个错字,您是否尝试过在桌面 safari 中切换用户代理? (必须启用开发人员菜单项)。将您的用户代理切换到“iPhone”,看看您是否收到空响应。

【讨论】:

  • 啊,是的 - 这是我的错字。我不知道用户代理选项。会试一试。
  • 刚刚检查过,当我将用户代理设置为 iPhone 时...我成功获取数据。不过,我在 iPhone 上看到问题的地方在于应用程序本身。我正在使用 PhoneGap,它获取我的 HTML/CSS/JS 并将其打包为 iPhone 的应用程序(不同于设备上的 Safari 浏览器)。
  • 尝试使用 Chrome 开发者工具查看 AJAX 请求/响应发生了什么。右键单击页面并检查,然后单击网络选项卡。您的 Ajax 调用应该在列表中 - 单击它,然后查看内容和标题选项卡。
  • 啊!这是我在 Chrome 开发控制台中看到的:“XMLHttpRequest 无法加载 mydomain.com/customPage.asmx/LoginMember。Access-Control-Allow-Origin 不允许 Origin null。”那么这是否意味着它看起来是同源策略问题?
  • 测试时你的域名是什么?是 file:// 协议吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-30
  • 1970-01-01
  • 2014-01-10
  • 1970-01-01
  • 2021-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多