2015-03-25 42 views
0

好的,这是我的问题。Ajax的数据参数没有送到服务器

我有一个HTML页面,其中已初始化一个JavaScript变量。

<html> 
    <script> 
     MyVaribale = "Random Data"; 
    </script> 

    <!-- Then I include an external js file to handle the processes in this html file --> 

    <script type="text/javascript" language="javascript" src="/scripts/some_random_script.js"></script> 

</html> 

现在,在该脚本中。我用MyVaribale varible在Ajax请求有一个,像这样:

$(document).ready(function() { 
    $.ajax(
     url : '/some/random/url', 
     data : { MyVariable : MyVaribale } 
     etc ... 
    ); 
}); 

所以,在页面加载,即Ajax代码,立即执行。

在上面指定的url中,我检查了MyVaribale的存在,然后标记一个错误,如果它不存在,则为必需值。

后端这样的代码(在Perl):

my $MyVariable = trim_param('MyVariable'); # trim_param() is a function that gets the passed data from ajax. 

if ($MyVariable) { # Test if it exists 
    # Display something 
} 
else { 
    # Flag an error, which is my problem 
} 

现在我相信,在HTML页面,该变量总是被填充(是100%确定)。但我总是得到标志错误,该值不存在于我的后端代码(上面的URL)中。

这样的问题,

是否阿贾克斯一些问题与document.ready,也许它执行变量已完成分配一个值之前?任何想法为什么发生这种情况因为有时我的Ajax请求是成功的,有时不是

感谢

+0

你可以发布你的后端代码吗? – 2015-03-25 07:18:22

+0

@HastaPasta编辑我的文章 – user2881063 2015-03-25 07:29:10

+0

在'$(document).ready(function(){'如果你添加'console.log(MyVaribale)'你看到控制台中变量的内容吗? – 2015-03-25 07:31:51

回答

1

你的Ajax调用的语法是不正确的。看看here,然后试试这个代码(注意添加{},):

MyVaribale = "Random Data"; 

$(document).ready(function() { 
    $.ajax({ 
     url: '/some/random/url', 
     data : { myVariable : MyVaribale } 
    }); 
}); 
+0

我已经编辑我的文章。这是一个错字。对不起。 – user2881063 2015-03-25 07:28:52

+0

我发布的代码似乎是正确的,你可以在这里尝试它(并编辑,如果你想):http://jsfiddle.net/jf3wz8a9/ – Danilo 2015-03-25 07:30:15

+0

是的,我知道代码是正确的。 ajax调用成功,有时不是。它在服务器上标记错误。 – user2881063 2015-03-25 07:32:13

0

你不尝试一些完全Ajax调用?像这样。有时候不需要为MyVariable使用JSON.stringify。

 $.ajax({ 
      url: "/some/random/url", 
      type: 'POST', 
      dataType: 'json', 
      data: JSON.stringify(MyVaribale), 
      contentType: 'application/json', 
      mimeType: 'application/json' 

     }).done(function(data) { 

     }).fail(function(error) { 

     }).always(function(){ 

     });