How can I use jQuery′s $.ajax() function to run php script?
本问题已经有最佳答案,请猛点这里访问。
为了理解这一点,我制作了一个示例代码,因为我的实际代码要大得多。
基本上,我想要完成的是运行我的PHP脚本,它使用Ajax编辑一个XML文件。这是因为我需要在我的实际项目中的一个JavaScript中完成这项工作。
这就是我目前为止所拥有的:
包含ajax函数的.php文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <!DOCTYPE html> <html> <head> function editXMLDoc() { $.ajax({ url:"sensors.php", context: document.body }).done(function() { $( this ).addClass("done" ); }); } </head> <body> <button type="button" onclick="editXMLDoc()">Endre XML</button> </body> </html> |
下面是写入XML的PHP脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php include 'sensor.php'; $b=new sensor(); $arr=$b->load('sensor.xml'); for($i=0,$ms=count($arr);$i<$ms;$i++) { if($arr[$i]['fields']['status']=='1') { $arr[$i]['fields']['status']='0'; }else{ $arr[$i]['fields']['status']='1'; } } echo"Completed<br/>"; //3. save array to xml $b->save('sensor.xml',$arr); ?> |
我知道脚本在工作,所以我非常确定问题在于Ajax函数和PHP脚本之间的连接。
有人能帮我吗?
尝试此代码…实际上,您没有附加jquery库。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | <!DOCTYPE html> <html> <head> <script src="http://code.jquery.com/jquery-latest.js"> <script type="text/javascript"> jQuery(document).ready(function($){ var resp = $("#response"); $.ajax({ type:"POST", // Method type GET/POST url:"sensors.php", //Ajax Action url data: {}, // Before call ajax you can do activity like please wait message beforeSend: function(xhr){ resp.html("Please wait..."); }, //Will call if method not exists or any error inside php file error: function(qXHR, textStatus, errorThrow){ resp.html("There are an error"); }, success: function(data, textStatus, jqXHR){ resp.html(data); } }); }); </head> <body> </body> </html> |
像这样使用Ajax:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <script type="text/javascript"> jQuery(document).ready(function($){ $('.rt11').click(function(){ $.ajax({ type:"POST", // Method type GET/POST url:"sensors.php", //Ajax Action url data: {yourKey:"yourValue", yourKey1:"another value <div class="suo-content">[collapse title=""]<ul><li>好的,但是如何用按钮调用这个函数呢?</li><li>在Ajax调用中,不需要"data"、"beforesend"和"type"属性来简化它。如果返回XML文件,则添加数据类型:"xml"。</li><li>在$('.rt11')内传递元素选择器类或ID。单击(function()。{</li><li>@很抱歉今天中午没空,但当你说进去的时候,我该怎么做呢?我想应该是这样的:<button type="button"class="rt11">endre-xml<button></li><li>我的意思是,您使用的是class="rt11",而这个类已经在大括号内使用了$(".rt11"),所以单击按钮,Ajax请求将调用。如果您使用的是火狐,那么安装一个名为firebug的插件,然后签入控制台,您将看到Ajax请求。</li><li>@satesh-hm.如果我放下按钮,让Ajax函数在每次加载页面时都运行,那么函数看起来如何?</li><li>然后您可以删除单击函数$('.rt11')。之后,Ajax将在页面加载时自动调用(function())。</li><li>SATEESH好!因为我怀疑这不起作用,这可能就是为什么我也不能让按钮工作的原因。所以我哪里出错了。为了让Ajax运行它,我需要在PHP脚本中说些什么吗?</li><li>不,Ajax是客户端脚本,所以PHP不能禁用它。我想你还有别的问题……你能分享你的链接吗?在那之后,我可以判断是否有错误。</li><li>我在本地主机上工作,但如果可以,我可以共享Dropbox链接?</li><li>是的,当然…只需分享你的链接</li><li>谢谢你,dropbox.com/sh/o07ng25hzc97xvk/aab5k6uqvcxadthrjoyf_4ya?dl=&zwnj;&8203;0</li></ul>[/collapse]</div><p><center>[wp_ad_camp_1]</center></p><hr><P>尝试这个,我认为您错过了包含jquery库文件。在Ajax调用之后,获取发布数据到您的PHP文件。</P>[cc lang="php"] <!DOCTYPE html> <html> <head> //include the jQuery library file <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"> function editXMLDoc() { var myvalue='123'; $.ajax({ url:"sensors.php", context: document.body, data: {myvalue:myvalue}, }).done(function() { $( this ).addClass("done" ); }); } </head> <body> <button type="button" onclick="editXMLDoc()">Endre XML</button> </body> </html> |
HTML:
1 | <button type="button" id="idButton">Endre XML</button> |
JS:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | $("#idButton").click(function(){ $.ajax({ url: 'sensors.php', dataType:"xml", //if it returns a xml file success: function (data) { // everything is ok alert(data) }, error: function (xhr, status, error) { // Something went wrong if (xhr.status > 0) alert('Error: ' + status); } }); }) |
我认为代码中没有问题,但有时在大型代码中,min.js文件没有正确包含。请尝试以下代码。不需要更改sensors.php文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <!DOCTYPE html> <html> <head> $(document).ready(function(){ $('.rt11').click(function(){ $.ajax({ url:"sensors.php", context: document.body }).done(function(html) { $( this ).addClass("done" ); }); }); }); </head> <body> <button type="button" class="rt11">Endre XML</button> </body> </html> |