为什么这个非常简单的跨域jQuery AJAX无效

时间:2014-10-02 22:28:43

标签: javascript jquery ajax jquery-mobile cordova

我正在使用以下技术构建移动应用程序

  • jQuery Mobile 1.4.4
  • jQuery 2.1.1
  • Cordova 3.6.3
  • 在Google Chrome 37桌面版上进行测试

**真正的解决方案**

如果您使用的是jQuery 1.8或更高版本,

请记住,.success,.error和.complete不推荐使用.done,.fail和.always for jQuery 1.8或更高版本

请记住将ajax定义放在$(文档).ready()中以确保它在DOM完全准备好后运行

像这样链接回调处理程序:$ .ajax()。done()。fail()。always();

以下是我最终如何处理它,我不介意与任何想在jQuery Mobile,jQuery 1.8或更高版本,PhoneGap,Cordova上使用ajax的人分享它

<html>
<head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="css/jquery.mobile.structure-1.4.4.min.css" />
    <script src="js/jquery-2.1.1.min.js"></script>
    <script src="js/jquery.mobile-1.4.4.min.js"></script>
</head>
<body>

<form>

<textarea name=userinput id=textarealol> </textarea>

<input type="button" value="Write on the server!" id="mybutton">

</form>

<script>

$mybutton = $("#mybutton");
$textarealol = $("#textarealol");

$( document ).ready(  
                    function( ) 
                    {

$hearitbutton.click(    
                        function(e) 
                        {                       
$.ajax(

{
    url     : "http://www.yourwebsite.com/yourpage.php",
    type    : "POST",
    data    : { comingover : $textarealol.val() },
}

    )
.done(

    function(e)
    {
        alert("Successfully Done");
    }
      )
.fail(

    function(e)
    {
        alert("ERRORNEOUS");
    }
      )
.always(

    function(e)
    {
       alert("E.N.D. jQ Ajax");
    }

      );

            } ); } );  // End of ready( ) and mybutton().click()

</script> </body> </html>

然后在您的PHP文件中,输入将存储在

$_POST['comingover']

1 个答案:

答案 0 :(得分:0)

记住它是JSONP,它需要回调,所以你需要返回回调函数。

这样的事情应该有效:

<?php
  header('Access-Control-Allow-Origin: *');

  $file = 'mytextfile.txt';
  $datvariable = $_POST['userinput'];
  file_put_contents($file, $lala , FILE_APPEND | LOCK_EX); // Nothing wrong with this

  $jsonp = false;
  // Get the name of the callback function
  if (isset($_POST['callback'])) {
    $_POST['callback'] = strip_tags($_POST['callback']);
    $jsonp = true;

    $pre  = $_POST['callback'] . '(';
    $post = ');';
  }

  // Replace ** some data if you want to ** with the data you wish to send to the
  // callback function.
  $json = json_encode( ** some data if you want to ** );
  print(($jsonp) ? $pre . $json . $post : $json);
?>

如果您不想使用回调发送任何数据,则只返回不带参数的回调:

  // $json = json_encode( ** some data if you want to ** ); // Remove this line.
  print(($jsonp) ? $pre . $post : '');