【问题标题】:Ajax request not being sent未发送 Ajax 请求
【发布时间】:2014-12-04 18:48:52
【问题描述】:

我目前正在创建一个向应用程序发出 POST 请求的函数。我的 JSON 字符串设置正确,但是当我使用调试器并监视网络活动时,我从未看到从浏览器发送任何请求。这是我的代码的细分。我不得不做一些诡计,因为这是一个 PoC 代码,它最初处理的是一个 jsp 页面。

$(document).ready(function() {

  $("#myForm").submit(function(e) {
    e.preventDefault();
    var myJsonObject = new Object();
    //set up my object and stringify it into myString

    sendDataToServer(myString);     
    });

  function sendDataToServer(jsonString) {
     $.ajax({
       type: "POST",
       data: jsonString,
       contentType: "application/json; charset=utf-8",
       url: "https://my.target.server.com"
       dataType : 'json',
       processdata: true,
       success: eval("successMessage"),
       error: eval("failureMessage")
       });
    }

 function successMessage() {
    alert("Post was successful");
  }

 function failureMessage() {
    alert("Post failed");
  }
});

现在,我的 ajax 调用失败(仍在处理凭据问题和证书),但我什至看不到从一开始就发送任何请求。我的ajax调用是错误的,还是有其他问题?如果我因证书问题而被拒绝访问服务器,在发送任何请求之前尝试建立与服务器的连接时会失败吗?

对于一些额外的信息,我在提交表单时确实看到了 failureMessage() 警报,所以我知道它至少在调用 ajax 函数。

【问题讨论】:

  • eval 是邪恶的。 不要在这种情况下使用 eval。使用闭包。
  • @LorenzMeyer 抱歉,对 AJAX 调用非常陌生。我查了闭包,它只是在成功参数中定义函数吗?
  • 对。只需调用该函数。不要评估它。

标签: jquery ajax


【解决方案1】:

不能发送跨域 AJAX 请求。

似乎“https://my.target.server.com”与运行脚本的域不同。 其他流行的解决方案是JSONPiframeflash。或者使用您的后端作为代理。

thisthis。 如果目标服务器也归您所有,您可能需要检查Cross-Origin Resource Sharing

【讨论】:

  • 每天学习新东西,谢谢!我会试试看。
【解决方案2】:

这可能是因为跨站点域。默认情况下,它设置为 false。如果 url 是不同的域,则需要将其切换为 true。

根据 JQuery 文档

crossDomain (default: false for same-domain requests, true for cross-domain requests)
Type: Boolean
If you wish to force a crossDomain request (such as JSONP) on the same domain, set the value of    crossDomain to true. This allows, for example, server-side redirection to another domain. (version added: 1.5)

希望这会有所帮助 快乐学习:)

【讨论】:

    【解决方案3】:

    请参阅此以说明我对 闭包 的含义。我还整合了其他人给出的答案。

    function sendDataToServer(jsonString) {
        $.ajax({
           type: "POST",
           data: jsonString,
           contentType: "application/json; charset=utf-8",
           url: "https://my.target.server.com"
           dataType : 'json',
           processdata: true,
           crossDomain: true,
           success: function() {alert("Post was successful")},
           error: function(){alert("Post failed")}
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-07-25
      • 2021-07-24
      • 1970-01-01
      • 2020-04-05
      • 2012-11-28
      • 2012-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多