【问题标题】:How to show AJAX response message in alert?如何在警报中显示 AJAX 响应消息?
【发布时间】:2014-08-05 16:40:01
【问题描述】:

我将用户名和密码作为请求参数发送到 AJAX 中的服务器并尝试显示响应消息。但无法显示响应消息。在提琴手中,它正在显示响应消息。但是在浏览器屏幕上它没有显示。请有人帮我找出我错的地方或需要改变任何东西.. 我是这样写的-

$(document).ready(function () {
  $("#btnCity").click(function () {
    $.ajax({
      type: "POST",
      url: "http://test.xyz.com/login",
      crossDomain: true,
      contentType: "application/json; charset=utf-8",
      data: { username: "abc", password: "1234" },
      dataType: "JSONP",
      jsonpCallback: 'jsonCallback',
      async: false,
      success: function (resdata) {
        alert(resdata);
      },
      error: function (result, status, err) {
        alert(result.responseText);
        alert(status.responseText);
        alert(err.Message);
      }
    });
  });
});

【问题讨论】:

  • resdata的值是多少?
  • 如果您在 console.log 中仅输出 resdata/err 本身会发生什么?你用的是什么浏览器?我怀疑这是 b/c 它返回 JSON,您需要调用 resdata.parse() 才能读取并显示它。怎么了?您是否在警报中收到任何内容,或者它从未出现过?尝试只提醒一些静态数据,如“blah”,看看你是否真的在没有它的情况下点击该代码,具体取决于该数据。
  • 你有没有从错误函数(err.Message)得到任何输出?
  • @Alek-我没有从 resdata 得到任何东西。它直接进入错误部分。
  • 您是在 XHR 处理本地文件,而不是实际由网络服务提供的文件(即使在 localhost 上)?因为出于安全考虑,浏览器通常会拒绝这样做。

标签: ajax json


【解决方案1】:

TL;DR:我猜问题出在您代码的服务器端(我们还不知道)。

起初:我不知道为什么它会失败。我已获取您的代码并针对公共可用的 JSONP API 运行它,该 API 返回您系统的当前 IP 并且它工作正常。

请尝试使用以下 URL:http://ip.jsontest.com/

所以很可能,服务器没有对 JSONP 请求返回正确的响应。查看开发人员工具中的网络选项卡。使用您当前的代码,服务器的答案应该是这样的:

jsonCallback({'someResponseKeys': 'someResponseValue'});

注意:标头应包含Content-Type:application/javascript!


顺便说一句,即使这暂时不能解决您的问题 - 这里有一些调整,我想给您一些建议:

  • 不要将async 设置为false,jQuery.ajax() 的文档中说:

    跨域请求和dataType:“jsonp”请求不支持同步 操作。

  • 您不需要设置jsonpCallback,因为 jQuery 将生成并处理(使用success 函数为您随机生成一个。引用自文档:

    这个值将被用来代替 jQuery 自动生成的随机名称。最好让 jQuery 生成一个唯一的名称,因为这样可以更轻松地管理请求并提供回调和错误处理。

我的代码来了:

$(document).ready(function () {
  $("#btnCity").click(function () {
    $.ajax({
      type: "POST",
      url: "http://ip.jsontest.com/",
      crossDomain: true,
      data: { username: "abc", password: "1234" },
      dataType: "JSONP",
      success: function (resdata) {
        console.log("success", resdata);
      },
      error: function (result, status, err) {
        console.log("error", result.responseText);
        console.log("error", status.responseText);
        console.log("error", err.Message);
      }
    });
  });
});

一个工作的example can be found here

另一种解决方案,如 Yonatan Ayalon 建议的那样,可以使用预定义函数完成,然后将 jsonpCallback 显式设置为应调用的函数。

【讨论】:

  • @concurrentHashMap- 我曾尝试使用 URL:ip.jsontest.com。从那里我得到了成功的回应。从该 url 获得响应后,我尝试使用我的 live url bt here m 没有得到响应。
  • @ConcurrentHashMap-感谢您的解释,它消除了我的一些疑问。
【解决方案2】:

如果您在 Fiddler 中看到响应,则似乎问题出在回调函数中。

您正在进行 jsonP 调用 - 这意味着您需要一个回调函数来“读取”响应数据。

你有调用“jsonCallback”的本地函数吗?

这是一个简单的 jsonP 请求,它使用响应数据启动函数“gotBack()”:

            function gotBack(data) {
                console.log(data);
            }
            $.ajax({
                url: 'http://test.xyz.com/login' + '?callback=?',
                type: "POST",
                data: formData,
                dataType: "jsonp",
                jsonpCallback: "gotBack"
            });

【讨论】:

    【解决方案3】:

    您可以尝试以下方法,并在任务管理器中关闭所有chrome浏览器实例,然后通过命令“chrome.exe --disable-web-security”以web安全禁用模式打开浏览器

     success: function (resdata) {
            alert(resdata);
            alert(JSON.stringify(resdata));
        },
    

    以及使用“调试器”调试代码的更好选择;

    success: function (resdata) {
                debugger;
                alert(resdata);
                alert(JSON.stringify(resdata));
            },
    

    【讨论】:

    • @pradeepta-我的调试指针没有到达成功区域,所以我将如何尝试你的代码? :(
    猜你喜欢
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 2019-08-17
    • 1970-01-01
    相关资源
    最近更新 更多