2014-12-04 241 views
1

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

$(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函数。

+1

** eval是邪恶**不要在这种情况下使用eval。使用闭包。 – 2014-12-04 18:52:23

+0

@LorenzMeyer对不起,AJAX电话很新。我查找了闭包,它只是定义了成功参数中的函数? – user3334871 2014-12-04 18:55:11

+0

对。只需调用该函数即可。不要评估它。 – isherwood 2014-12-04 19:10:35

回答

1

不能发送跨域AJAX请求。

看起来像“https://my.target.server.com”是一个不同于你的脚本运行的域。 其他流行的解决方案将是JSONP,iframeflash。或者使用您的后端作为代理。

请参阅thisthis。 如果目标服务器也由您拥有,您可能需要检查Cross-Origin Resource Sharing

+0

每天学习新东西,谢谢!我会试试看。 – user3334871 2014-12-04 18:56:37

0

这可能是因为跨网站域。默认情况下它被设置为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) 

希望这是一些帮助 快乐学习:)

0

见这说明我的意思与关闭。我也整合了其他人给出的答案。

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")} 
    } 
}