GVKun编程网logo

使用PhoneGap和jQuery的跨域请求不起作用(jquery 跨域请求)

16

本文将分享phpsetcookie无法与ajax调用一起使用的详细内容,并且还将对phpsetcookie无效进行详尽解释,此外,我们还将为大家带来关于ajax_getcookie、Ajax跨域请求C

本文将分享php setcookie无法与ajax调用一起使用的详细内容,并且还将对php setcookie无效进行详尽解释,此外,我们还将为大家带来关于ajax_getcookie、Ajax跨域请求COOKIE无法带上的完美解决办法、Ajax跨域请求COOKIE无法带上的解决办法、ASP.Net MVC:可以将数据注释/验证与AJAX / jQuery调用一起使用吗?的相关知识,希望对你有所帮助。

本文目录一览:

php setcookie无法与ajax调用一起使用(php setcookie无效)

php setcookie无法与ajax调用一起使用(php setcookie无效)

我有一个页面test.php,其中包含以下代码:

<html>    <body>        <form>            <script type="text/javascript">                function SendCookies(){                    if (window.XMLHttpRequest)/* code for IE7+, Firefox, Chrome, Opera, Safari */                    { xmlhttp=new XMLHttpRequest(); }                    else /* code for IE6, IE5 */                    { xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); }                    xmlhttp.onreadystatechange=function()                    {                        if (xmlhttp.readyState==4 && xmlhttp.status == 200)                        {                            alert(''done'');                        }                    }                    xmlhttp.open("GET", "/web/DEV/Classes/SetCookie.php?time=" + new Date());                    xmlhttp.send();                }            </script>            <input type="text" id="txtInput" name="txtInput"/>            <input type="button" id="btnSubmit" name="btnSubmit" value="Submit"  onclick="SendCookies()"/>            <div id="divTest">                <?php                    if (isset($_COOKIE["TestCookie"])) {                        echo $_COOKIE["TestCookie"];                    } else {                        echo "__Results__";                    }                ?>                      </div>        </form>    </body></html>

我有一个页面,SetCookie.php,其中包含以下代码:

<?php     $var = "THIS IS  A  TEST";    setcookie("TestCookie", $var, time()+60*60*24*30);?>

当单击test.php的按钮时,我使用XMLHttpRequest来调用我的SetCookie.php页面。该页面将执行,因为如果我向其添加回显,则会在xmlhttp响应中得到它。但是,TestCookie似乎没有设置。

如果在text.php中,我执行与SetCookie.php中相同的命令,则将为所有浏览器会话相应地设置cookie。

即使在我关闭/打开浏览器之后,从我在test.php页面中手动设置它以来,cookie仍然保持不变。

- - 编辑 - - -

我补充说:

if(!setcookie("TestCookie", "A", time()+60*60*24*30, "/")) {    echo "FAIL";}

到test.php的最上端,但是,当我重新加载页面时,它永远不会显示更新的cookie … 因为该cookie已设置为不带“”
/“参数,并且以后无法使用”“ /进行修改”参数。

清除缓存并使用建议的代码后,我从浏览器中清除了cookie,并使用set方法的添加参数,从而能够操作所有页面中的cookie !!!非常感谢!!

答案1

小编典典

如果您没有在中添加$pathsetcookie(),则默认为“当前目录”。这意味着,如果您将cookie从/web/DEV/Classes/SetCookie.php设置为/web/DEV/Classes/,则cookie设置为,并且该路径上方的任何内容都不会看到该cookie。

要解决此问题,请将特定的$
path添加到setcookie。如果您的应用程序在域根目录(example.com)上运行,请使用''/''。如果位于子文件夹(example.com/myapp/)中,请使用''/myapp/''

setcookie("TestCookie", $var, time()+60*60*24*30, ''/'');

ajax_getcookie

ajax_getcookie

 1 function getCookie(name) {
 2     var cookieValue = null;
 3     if (document.cookie && document.cookie !== ‘‘) {
 4         var cookies = document.cookie.split(;);
 5         for (var i = 0; i < cookies.length; i++) {
 6             var cookie = jQuery.trim(cookies[i]);
 7             // Does this cookie string begin with the name we want?
 8             if (cookie.substring(0,name.length + 1) === (name + =)) {
 9                 cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
10                 break;
11             }
12         }
13     }
14     return cookieValue;
15 }
16 var csrftoken = getCookie(csrftoken);

Ajax跨域请求COOKIE无法带上的完美解决办法

Ajax跨域请求COOKIE无法带上的完美解决办法

这篇文章主要介绍了ajax跨域请求cookie无法带上的解决办法,对ajax感兴趣的朋友可以参考下ajax跨域请求cookie无法带上的完美解决办法

1、原生ajax请求方式:

1 var xhr = new XMLHttpRequest(); 

2 xhr.open("POST", "http://xxxx.com/demo/b/index.php", true); 

3 xhr.withCredentials = true; //支持跨域发送cookies

4 xhr.send();

2、jquery的ajax的post方法请求:

$.ajax({
    type: "POST",
    url: "http://xxx.com/api/test",
    dataType: &#39;json&#39;,
    // 允许携带证书
    xhrFields: {
       withCredentials: true
    },
    // 允许跨域
    crossDomain: true,
    success:function(){
    },
    error:function(){
  }
})
登录后复制

3、服务器端设置:

header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Origin: http://www.xxx.com");
登录后复制

以上所述是小编给大家介绍的Ajax跨域请求COOKIE无法带上的完美解决办法,希望对大家有所帮助!!

相关推荐:

实例详解js结合json实现ajax简单实例

实例详解ajax实现分页查询功能

实例详解ajax提交到java后台之后处理数据方法

以上就是Ajax跨域请求COOKIE无法带上的完美解决办法的详细内容,更多请关注php中文网其它相关文章!

Ajax跨域请求COOKIE无法带上的解决办法

Ajax跨域请求COOKIE无法带上的解决办法

1、原生ajax请求方式: 
1 var xhr = new XMLHttpRequest();  
2 xhr.open("POST","http://xxxx.com/demo/b/index.PHP",true);  
3 xhr.withCredentials = true; //支持跨域发送cookies
4 xhr.send();
2、jquery的ajax的post方法请求: 
 $.ajax({
        type: "POST",url: "http://xxx.com/api/test",dataType: 'json',     允许携带证书
        xhrFields: {
             withCredentials: true
        },0); line-height:1.5!important"> 允许跨域
        crossDomain: true,success:function(){
        },error:function(){
    }
})
3、服务器端设置: 
 
header("Access-Control-Allow-Credentials: true"); header("Access-Control-Allow-Origin: http://www.xxx.com");

转自http://blog.sina.com.cn/s/blog_87b9bbc70102vg18.html

ASP.Net MVC:可以将数据注释/验证与AJAX / jQuery调用一起使用吗?

ASP.Net MVC:可以将数据注释/验证与AJAX / jQuery调用一起使用吗?

您可以通过AJAX / jQuery调用使用数据注释/验证吗?如果是这样,请提供示例或显示示例的帖子。

基本上,我已经看到了有关如何使用数据注释的示例,但是它包含完整的回发信息。有没有办法处理AJAX /
jQuery调用?由于我不确定如何在客户端构造Model对象,因此不确定如何执行此操作。(我认为这是您必须要做的。)

有人告诉我可以做到的,但我只是不知道怎么做。

谢谢你的帮助。

答案1

小编典典

如果使用Html.AjaxForm(而不是Html.BeginForm),它将使用Ajax进行验证。

但是我认为您不能使用jQuery进行验证。微软拥有自己的Ajax库,他们自己调用/维护它。我认为您不能在两者之间挂钩自己的代码。

今天关于php setcookie无法与ajax调用一起使用php setcookie无效的分享就到这里,希望大家有所收获,若想了解更多关于ajax_getcookie、Ajax跨域请求COOKIE无法带上的完美解决办法、Ajax跨域请求COOKIE无法带上的解决办法、ASP.Net MVC:可以将数据注释/验证与AJAX / jQuery调用一起使用吗?等相关知识,可以在本站进行查询。

在这里,我们将给大家分享关于如何使用Ajax将输入文件数据值发送到php页面的知识,让您更了解ajax传输文件的本质,同时也会涉及到如何更有效地javascript – 使用ajax将php响应发送到div无法正常工作、javascript – 使用AJAX将数据发送到PHP、javascript – 如何使用通过AJAX发送到php的结帐令牌创建条带费用、javascript-使用AJAX将表单数据保存到PHP的内容。

本文目录一览:

如何使用Ajax将输入文件数据值发送到php页面(ajax传输文件)

如何使用Ajax将输入文件数据值发送到php页面(ajax传输文件)

我想要做的是每当用户选择图片并单击按钮时,它将把图像移动到特定的文件夹,并将链接保存到数据库的user_image列。

我的问题是,单击“提交”按钮后,图片的实际名称未保存在数据库列中。示例Oppa/upload/多数民众赞成在数据库中保存的值没有图片文件名。

我认为photo.php没有收到文件的值,任何人都可以帮助我解决它。

<input type=''file'' id="imageInput" name="imageInput" accept="image/*" /><button  id="changePicture" name="changePicture">Submit</button>

脚本:

var data = {};        data.imageInput = $(''#imageInput'').val();        data.email = $(''#email'').val();        $.ajax({            type: "POST",            url: "Oppa/view/photo.php",            data: data,            cache: false,            success: function (response) {            if (Number(response) == 1)                {                   $("#dialog-confirm-changedImage").dialog("open");                }            }        });            return false;

photo.php

<?phpinclude_once(''../dbc/database.php'');$db = new Connection();$db = $db->dbConnect();$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);$email = isset($_POST[''email'']) ? $_POST[''email''] : "";$image = addslashes(file_get_contents($_FILES[''imageInput''][''tmp_name'']));$image_name = addslashes($_FILES[''imageInput''][''name'']);$image_size = getimagesize($_FILES[''imageInput''][''tmp_name'']);move_uploaded_file($_FILES["imageInput"]["tmp_name"], "Oppa/upload/" . $_FILES["imageInput"]["name"]);$location = "Oppa/upload/" . $_FILES["imageInput"]["name"];if(!empty($_POST[''email''])) {        $q = "UPDATE tbl_user SET user_image = ''$location'' WHERE user_email= :email ";        $query = $db->prepare($q);        $query->bindParam('':email'', $email);        $results = $query->execute();        echo "1";}?>

答案1

小编典典

看看这个http://malsup.com/jquery/form/#ajaxSubmit。

包括该插件jquery.form.js,然后尝试。

$(''#FormID'').ajaxSubmit({ //FormID - id of the form.        type: "POST",        url: "Oppa/view/photo.php",        data: $(''#FormID'').serialize(),        cache: false,        success: function (response) {        if (Number(response) == 1)            {               $("#dialog-confirm-changedImage").dialog("open");            }        }    });

这应该工作。我将其用于Ajax图片上传。

谢谢。

javascript – 使用ajax将php响应发送到div无法正常工作

javascript – 使用ajax将php响应发送到div无法正常工作

嗨,我目前正在开展一个项目.当用户提交表单时,它会将响应加载到div而不是加载新页面.我已经查看了与PHP一起在线工作的ajax表单的其他示例,但它并没有帮助我解决我的问题. (我对此很新).

当我单击提交时,不是将响应发布到同一页面并向所选电子邮件地址发送电子邮件,而是将我带到PHP文件并在那里回复响应,但不发送任何电子邮件.

任何人都可以看到这出错的地方?

表格代码:

<form name="contactform" id="contact-form" action="mailer.PHP">

            <input type="text"https://www.jb51.cc/tag/Box/" target="_blank">Box" name="name" value="Name" required="required" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Name';}">

            <input type="text"https://www.jb51.cc/tag/Box/" target="_blank">Box" name="email" value="Email" required="required" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Email';}">

            <textarea name="message" value="Message:" required="required" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Message';}">Message</textarea>

           <input type="submit" value="Send Now">

</form>
                    <div id="response"></div>

Javascript代码:

<script>
 $("#contactform").submit(function(event) 
 {
     /* stop form from submitting normally */
     event.preventDefault();

     /* get some values from elements on the page: */
     var $form = $( this ),
         $submit = $form.find( 'button[type="submit"]' ),
         name_value = $form.find( 'input[name="name"]' ).val(),
         email_value = $form.find( 'input[name="email"]' ).val(),
         message_value = $form.find( 'textarea[name="message"]' ).val(),
         url = $form.attr('action');

     /* Send the data using post */
     var posting = $.post( url, { 
                       name: name_value, 
                       email: email_value, 
                       message: message_value 
                   });

     posting.done(function( data )
     {
         /* Put the results in a div */
         $( "#response" ).html(data);

     });
});
</script>

PHP代码:(我的PHP存储在一个名为mailer.PHP的单独文件中)我试图将PHP $响应变量发回并放入响应div.

<?PHP


    // Get the form fields and remove whitespace.
    $name = $_POST["name"];
    $email = $_POST["email"];
    $message = $_POST["message"];

    $to = "your-emailaddresshere@email.com";
    $subject = "New DPS Email from $name";

    // Build the email content.
    $email_content = "Name: $name\n";
    $email_content .= "Email: $email\n\n";
    $email_content .= "Message:\n$message\n";

    // Build the email headers.
    $email_headers = "From: $name <$email>";

    $mailed = (mail($to, $subject, $email_content, $email_headers));

    if( isset($_POST['ajax']) )
    $response = ($mailed) ? "1" : "0";
    else
    $response = ($mailed) ? "<h2>Thank You! Your message has been sent.</h2>" : "<h2>Oops! Something went wrong and we Couldn't send your message.</h2>";

    echo $response; 

?>

在此先感谢您的帮助!

解决方法:

这是你可以做的:
表格代码

<form name="contactform" id="contact-form">
    <!--Your form elements here -->
</form>

javascript代码(使用#contact-form而不是#contactform)

<script>
$("#contact-form").submit(function(event) 
{
 /* stop form from submitting normally */
 event.preventDefault();

 /* get some values from elements on the page: */
 var $form = $( this ),
     $submit = $form.find( 'button[type="submit"]' ),
     name_value = $form.find( 'input[name="name"]' ).val(),
     email_value = $form.find( 'input[name="email"]' ).val(),
     message_value = $form.find( 'textarea[name="message"]' ).val(),
     url = 'your_url_here';

 /* Send the data using post */
 var posting = $.post( url, { 
                   name: name_value, 
                   email: email_value, 
                   message: message_value 
               });

 posting.done(function( data )
 {
     /* Parse JSON */
     var response = JSON.parse(data);
     $("#response").html(response.msg);

    });
 });
</script>

你的PHP代码:

<?PHP


// Get the form fields and remove whitespace.
$name = $_POST["name"];
$email = $_POST["email"];
$message = $_POST["message"];

$to = "your-emailaddresshere@email.com";
$subject = "New DPS Email from $name";

// Build the email content.
$email_content = "Name: $name\n";
$email_content .= "Email: $email\n\n";
$email_content .= "Message:\n$message\n";

// Build the email headers.
$email_headers = "From: $name <$email>";

$mailed = mail($to, $subject, $email_content, $email_headers);

if( $mailed )
$response = json_encode(array("status"=>true,"msg"=>"<h2>Thank You! Your message has been sent.</h2>"));
else
$response = json_encode(array("status"=>false,"msg"=>"<h2>Oops! Something went wrong and we Couldn't send your message.</h2>"));

echo $response; 

?>

javascript – 使用AJAX将数据发送到PHP

javascript – 使用AJAX将数据发送到PHP

我在发布此问题之前已经搜索了我的问题,但未能找到解决方案.
我需要将一个json字符串发送到PHP文件但无法这样做,有人可以帮我解决下面的问题:我是PHP和jquery的新手并且正在努力,需要你的合作.

我有一个捕获文本文件数据的函数:

function updateVal() {
var node_list = document.getElementsByTagName('input');
var c = 0;
var fieldName = [];
var fieldText = []
var ID = [];
for (var i = 0; i < node_list.length; i++) {
    var node = node_list[i];
    if (node.getAttribute('type') == 'text') {
        fieldName[c] = node.name;
        fieldText[c] = node.value;
        ID[c] = node.id;
        c++;
    }
}
var postData = {
    fieldName: fieldName,
    fieldText: fieldText,
    ID: ID
};
 var dataString = JSON.stringify(postData);


console.log(JSON.stringify(postData));
$.ajax({
        type: "POST",
        dataType: "json",
        url: "update.PHP",
        data: {myData:postData}
        })

//return JSON.stringify(postData);
}

我的update.PHP是这样的:

<?PHP
$json = $_POST['json'];
$result = json_decode($json);

echo $result;
echo $_POST['myData']);?>

加载时:我收到以下错误:

Failed to load resource: the server responded with a status of 500 (Internal Server Error)

而且,我不确定是否将数据发送到PHP.
专家们可以证实.

解决方法:

500(内部服务器错误)意味着服务器端出现了问题.因此,请查看apache错误日志以获取更多详细信息

你可能会在这里找到apache log / var / log / apache2 /

javascript – 如何使用通过AJAX发送到php的结帐令牌创建条带费用

javascript – 如何使用通过AJAX发送到php的结帐令牌创建条带费用

我试图用自定义按钮使用Stripe的新结帐功能,通过 AJAX POST发送令牌到PHP文件,然后执行费用.不幸的是,我从POST变量中检索到令牌有一些麻烦.我希望这里的某个人能够告诉我我过于简单,如果有一个更简单的方法来做到这一点.

在客户端,我有5个按钮,不同的可能“捐款”.这是迄今为止写的js(不包括html):

$(function() {

  var donationAmt = '';
  var handler = StripeCheckout.configure({
    key: 'pk_test_3plF76arhkygGMgwCEerThpa',image: '/square-image.png',token: function(token,args) {
      // Use the token to create the charge with a server-side script.
      // You can access the token ID with `token.id`
      console.log(token)
      var chargeData = {
        donationAmt: donationAmt,token: token
      }
      $.ajax({
          url: '/link/to/PHP/stripeDonate.PHP',type: 'post',data: {chargeData: chargeData},success: function(data) {
            if (data == 'success') {
                console.log("Card successfully charged!")
            }
            else {
                console.log("Success Error!")
            }

          },error: function(data) {
                console.log("Ajax Error!");
                console.log(data);
          }
        }); // end ajax call
    }
  });

  $('.donate-button').bind('click',function(e) {
    donationAmt = $(this).html().substring(1) + '00';
    donationAmt = parseInt(donationAmt); // Grabs the donation amount in the html of the button and store it in a variable
    // Open Checkout with further options
    handler.open({
      name: 'Company Name',description: 'A donation',amount: donationAmt
    });
    e.preventDefault();
  });
});

这是我正在处理AJAX POST调用的PHP:

<?PHP

require_once('Stripe.PHP');

// Set your secret key: remember to change this to your live secret key in production
// See your keys here https://manage.stripe.com/account
Stripe::setApiKey("sk_test_APIKEYREDACTED");

// Get the credit card details submitted by the form
$token = json_decode($_POST['chargeData']);
$tokenid = $token['id'];

// Create the charge on Stripe's servers - this will charge the user's card
try {
$charge = Stripe_Charge::create(array(
  "amount" => 2000,// amount in cents,again
  "currency" => "usd","card" => $tokenid,"description" => "payinguser@example.com")
);
echo 'success';
} catch(Stripe_CardError $e) {
  // The card has been declined
    echo $tokenid;
}

?>

PHP错误日志中指出的代码的直接结果是令牌的POST变量不能被“读取”.令牌正在被创建(我正在控制台上看到它),但是当我通过AJAX发送时它消失了.

每个人都一直在说条纹是非常容易实现的,所以我真的觉得我在这里缺少一些东西.有人能够散发光吗?

谢谢!

解决方法

所以经过10个小时的休息和一个更清晰的头,我已经决定以稍微不同的方式解决这个问题.这是任何其他人绊倒我相同的问题,并希望能够像条纹/ ajax / PHP教程一样很好地工作.原来我一直在想POST数据都错了.即使使用AJAX,您也需要一个键和值对来发送任何类型的POST数据.我已经重新编码了我的这个部分:
var handler = StripeCheckout.configure({
    key: 'PUBLISHABLEKEY',args) {
      // Use the token to create the charge with a server-side script.
      // You can access the token ID with `token.id`
      console.log(token)
      $.ajax({
          url: 'link/to/PHP/stripeDonate.PHP',data: {tokenid: token.id,email: token.email,donationAmt: donationAmt},success: function(data) {
            if (data == 'success') {
                console.log("Card successfully charged!");
            }
            else {
                console.log("Success Error!");
            }

          },error: function(data) {
            console.log("Ajax Error!");
            console.log(data);
          }
        }); // end ajax call
    }
  });

请注意,一个主要更改是ajax方法的数据属性.控制台记录令牌对象显示整个JSON令牌对象,您可以使用它来提取ID(您的服务器需要发送到条带以收取费用)以及电子邮件(用于记录目的).由于我有一个可变的捐赠金额,我已经把它作为第三个关键.

现在在你的PHP中,为了获取这些POST变量并把它们放入PHP变量中,你可以使用它们各自的键来获取它们:

$tokenid = $_POST['tokenid'];
$donation = $_POST['donationAmt'];
$email = $_POST['email'];

然后一切都应该是自我解释的(以下几乎是与条纹PHP教程完全相同的例子).

无论如何,希望这有助于一个人在那里.祝你好运!

javascript-使用AJAX将表单数据保存到PHP

javascript-使用AJAX将表单数据保存到PHP

如何将表单数据保存在文件或本地db(也许使用AJAX)中,该文件或数据通过表单操作将数据发送到外部db?

我的表格的源代码在这里:http://jsbin.com/ojUjEKa/1/edit

我应该对代码进行哪些更改(如果有)?

EDIT:

对.因此,我能够使用AJAX将数据存储到localStorage中,并希望将存储的数据发送到名为backend.PHP的文件中.这是我的HTML文件:http://jsbin.com/iSorEYu/1/edit

这是我的backend.PHP文件:http://jsbin.com/OGIbEDuX/1/edit

AJAX在将字段存储在localStorage中的工作绝对正常,但是在尝试将数据发送到backend.PHP时出现了问题.我收到以下错误:

 [24-Jan-2014 08:40:34 America/Chicago] PHP Notice:  Undefined index: data in /home4/private/public_html/marketer/backend.PHP on line 7
 [24-Jan-2014 08:40:34 America/Chicago] PHP Warning:  Invalid argument supplied for foreach() in /home4/private/public_html/marketer/backend.PHP on line 10
 [24-Jan-2014 08:40:58 America/Chicago] PHP Notice:  Undefined index: data in /home4/private/public_html/marketer/backend.PHP on line 7
 [24-Jan-2014 08:40:58 America/Chicago] PHP Warning:  Invalid argument supplied for foreach() in /home4/private/public_html/marketer/backend.PHP on line 10

这里有什么问题?

解决方法:

LocalStorage将是您最好的选择.我建议使用storejs,因为他们的API非常简单,易于使用和使用x浏览器.

然后,您可以触发将表单值存储在每个字段的“模糊”事件中.

$('input').on('blur', function (e) {
  var el = e.target;
  store.set(el.attr('name'), el.val());
});

当您准备提交到服务器时,可以使用以下内容:

$('#formID').on('submit', function (e) {
  e.preventDefault();
  $.post('/my/save/route', store.getAll(), function () { ... });
});

您当然可以在没有storejs的情况下完成所有这些操作,并使用香草JS与原生LocalStorage API进行交互.

关于如何使用Ajax将输入文件数据值发送到php页面ajax传输文件的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于javascript – 使用ajax将php响应发送到div无法正常工作、javascript – 使用AJAX将数据发送到PHP、javascript – 如何使用通过AJAX发送到php的结帐令牌创建条带费用、javascript-使用AJAX将表单数据保存到PHP等相关内容,可以在本站寻找。

在这篇文章中,我们将带领您了解使用PhoneGap和jQuery的跨域请求不起作用的全貌,包括jquery 跨域请求的相关情况。同时,我们还将为您介绍有关android – 如何在phonegap和jquery mobile上传任何类型的文件?、ios – 使用PhoneGap和jQuery Mobile for mobile app的页面之间的白色闪烁、jQuery ajax XML Http请求不起作用、jquery – Phonegap,cookies,跨域请求的知识,以帮助您更好地理解这个主题。

本文目录一览:

使用PhoneGap和jQuery的跨域请求不起作用(jquery 跨域请求)

使用PhoneGap和jQuery的跨域请求不起作用(jquery 跨域请求)

我正在为Android创建一个PhoneGap应用。为了从(远程)服务器获取数据,我使用jQuery的$
.ajax()函数进行了REST调用。您必须了解几件事:

  • 通话类型必须为POST
  • 服务器需要JSON数据(至少用户名和密码)
  • 服务器发回JSON数据

代码:

function makeCall(){    var url = "http://remote/server/rest/call";    var jsonData =''{"username":"''+$(''#username'').val()+''","password":"''+$(''#password'').val()+''"}'';    $.ajax({            headers: {"Content-Type":"application/json; charset=UTF-8"},            type: "POST",            url: url,            data: jsonData,            dataType: "json",            success: succesFunction,            error: errorFunction    });}

但是,这不起作用。当我使用Firebug查看服务器响应时,什么都没有。使用TcpTrace,我可以看到请求的标头。除了期望的POST方法,还有一个OPTIONS方法,其中添加了一些奇怪的标头。

OPTIONS /remote/server/rest/call HTTP/1.1Host: localhost:8081User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20100101 Firefox/11.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: nl,en-us;q=0.7,en;q=0.3Accept-Encoding: gzip, deflateConnection: keep-aliveOrigin: nullAccess-Control-Request-Method: POSTAccess-Control-Request-Headers: content-typePragma: no-cacheCache-Control: no-cache

我知道这与执行跨域请求有关,但是我不知道如何解决该问题。我尝试了一些修复方法,但没有结果:

  • 使用“ jsonp”代替“ json”
  • 尝试使用跨域资源共享(CORS)

该问题也与相同的原始策略有关,但这不适用于PhoneGap用于加载本地html文件的file://协议。

在我的AndroidManifest.xml文件中,该选项

<uses-permission android:name="android.permission.INTERNET" />

被设置。

我正在尝试将其修复2天,但到目前为止没有任何结果。这有可能吗?您对我有什么建议,让我继续前进吗?

提前致谢!

答案1

小编典典

我自己解决了这个问题。问题位于网址中,我必须在其中添加域。我变了

var url = "http://remote/server/rest/call";

var url = "http://remote.mydomain.com/server/rest/call";

而且有效!

我认为第一个网址应该可以正常工作,因为它可以在具有相同网址和设置的iPhone应用程序上正常工作。它也与双重防火墙(Windows和ESET防火墙)有关,在双重防火墙中,我关闭了Windows防火墙。

无论如何,谢谢您的回答!

android – 如何在phonegap和jquery mobile上传任何类型的文件?

android – 如何在phonegap和jquery mobile上传任何类型的文件?

我正在phonegap android中创建一个应用程序,我想在其中上传文件到服务器.我想要的是当用户点击上传按钮时,将打开一个选项对话框,用户将从该位置选择要上传的文件,然后当用户点击保存按钮时,将上传文件.对话框将像普通窗口一样,就像我们在桌面上点击邮件中的附加按钮时看到的那样.
任何人都可以告诉我如何在Android手机中这样做?
任何帮助表示赞赏.

提前致谢.

解决方法:

使用phonegap文件传输方法
FileTransfer对象允许您上传文件或从服务器下载文件.

属性

> onprogress:每当传输新的数据块时,使用ProgressEvent调用. (功能)

方法

> upload:将文件发送到服务器.
>下载:从服务器下载文件.
> abort:中止正在进行的转移.

样品
// !!假设变量fileURI包含设备上文本文件的有效URI

var win = function (r) {
    console.log("Code = " + r.responseCode);
    console.log("Response = " + r.response);
    console.log("Sent = " + r.bytesSent);
}

var fail = function (error) {
    alert("An error has occurred: Code = " + error.code);
    console.log("upload error source " + error.source);
    console.log("upload error target " + error.target);
}

var options = new FileUploadOptions();
options.fileKey = "file";
options.fileName = fileURI.substr(fileURI.lastIndexOf('/') + 1);
options.mimeType = "text/plain";

var params = {};
params.value1 = "test";
params.value2 = "param";

options.params = params;

var ft = new FileTransfer();
ft.upload(fileURI, encodeURI("http://some.server.com/upload.PHP"), win, fail, options);

您可以使用浏览和选择文件

var source =  navigator.camera.PictureSourceType.PHOTOLIBRARY;
navigator.camera.getPicture(successFn, errorFn, { quality: 50,
        destinationType: this.photoDestinationType.FILE_URI,
        sourceType: source,
        mediaType: navigator.camera.MediaType.ALLMEDIA  });

更多信息检查link

ios – 使用PhoneGap和jQuery Mobile for mobile app的页面之间的白色闪烁

ios – 使用PhoneGap和jQuery Mobile for mobile app的页面之间的白色闪烁

在iPhone上使用jQuery Mobile和PhoneGap在页面之间导航时,会出现一个恼人的白色闪光,显示在新页面加载之前.像这样的简单链接会导致:

<a href="user.html" rel="external" data-role="button">User details</a>

我怎样才能解决这个问题?一个合理的解决方法可能是将白色闪光灯改为与我的网页背景颜色相同的颜色,但我不知道这是否可行.

更新:

我在iPhone IOS 5.1和5.2上使用PhoneGap 1.5.0(又名Cordova),jQuery 1.6.4和jQuery Mobile 1.0.1.

这个问题似乎在Safari桌面上持续存在(尽管不那么明显). Firefox上没有问题.

更新2:

闪烁肯定是通过将​​链接标记为rel =“external”引起的.不幸的是,我链接到jQuery Mobile多重,所以这是必要的.

解决方法

jQuery Mobile 1.1.0 RC2(刚刚发布)和jQuery 1.7.1的组合不会遇到这个问题!精彩.来自jQuery Mobile团队的出色工作.我知道这个bug正困扰着他们!

更新:

如果您仍然看到闪光灯,则可以通过在CSS中提供通用的背景颜色来大幅改善用户体验.例如,如果您使用的是黑暗主题,则将其添加到主题的CSS中会将“白色”闪光灯更改为“黑色”闪光:

body{
   background-color: black !important
}

此外,如果您可以在链接中不使用rel =“external”而离开,那么闪存也将消失.不幸的是,根据您的设计,这可能会搞砸您的导航.

我刚刚更新到qQuery Mobile 1.1.0 final.链接到外部页面时闪存是可见的,即不使用多页,但如果您链接的页面很复杂(大)并且需要一段时间来渲染,则闪存只是一个问题.在这些情况下,保持一致的背景使用户体验非常好.

删除页面转换效果还可以通过在包含jquery移动库之前包含以下javacript来将中断降至最低.

$(document).bind("mobileinit",function(){
  $.mobile.defaultPageTransition="none"
});

jQuery ajax XML Http请求不起作用

jQuery ajax XML Http请求不起作用

由于jQuery中的Ajax请求,存在未定义的错误。但是它在本地工作。jquery1.3.2.js @ 3633行中的错误引用

xhr.send(s.data);

我的代码是:

$.ajax({    type: "POST",    url: ''index.php'',    data: "action=showpath&type=images&path=&default=1",    cache: false,    dataType: "html",    success: function (data) {        $(''#addr'').html(data);    },    error: function (xhr, ajaxOptions, thrownError) {        alert(xhr.status);        alert(thrownError);    }});

代码中的警报向我显示(0,“未定义”);

我做错了什么?

答案1

小编典典

如果您的ajax请求在完成之前被取消,则可能会发生这种情况。当用户通过刷新,单击链接或更改浏览器中的URL离开页面时,jQuery引发错误事件。通过为ajax调用实现错误处理程序并检查xmlHttpRequest对象,可以检测到这些类型的错误:

$.ajax({    /* ajax options omitted */    error: function (xmlHttpRequest, textStatus, errorThrown) {         if(xmlHttpRequest.readyState == 0 || xmlHttpRequest.status == 0)               return;  // it''s not really an error         else              // Do normal error handling});

jquery – Phonegap,cookies,跨域请求

jquery – Phonegap,cookies,跨域请求

我正在开发一个需要连接到staless远程服务器的phonegap应用程序.一些远程请求已通过身份验证,我计划使用remember-me服务.因此,从应用程序中有一个登录选项,该选项被转换为使用jQuery $.ajax执行的以下请求.请注意,所有请求都是application / json

POST remoteserver/api/users/login

并且服务器响应设置cookie

Set-Cookie REMEMBER_ME_COOKIE=amVzdS5hbG9uc29AZ21haWwuY29tOjEzNTEwMDg1NTg1NDY6ODdkOGFhNzEzY2NiZTRhZTIwZjZlNzgyY2E1ZmQyODY; Expires=Tue,23-Oct-2012 16:09:18 GMT; Path=/; HttpOnly

为了使跨域请求起作用,服务器对OPTIONS请求的响应如下:

Access-Control-Allow-Headers : Content-Type,*
Access-Control-Allow-Origin : *
Access-Control-Max-Age : 1000

但是,对服务器的下一个请求不是设置Cookie标头.

1)是否可以使cookie工作?

2)我还尝试在$.ajax请求中手动添加cookie,但它也不起作用.这有什么不对吗?

$.ajax({
        type : type,url : url,data : data,success : callback,dataType : dataType,contentType : contentType,beforeSend: function(xhr) {
            xhr.setRequestHeader("Cookie","REMEMBER_ME_COOKIE=amVzdS5hbG9uc29AZ21ha");
          },error : function(jqXHR,textStatus,errorThrown) {
            handleError(jqXHR,errorThrown);
        }
    });

解决方法

您是否尝试将标头结构化为您的请求?

$.ajax({
        type : type,headers:{
             "Cookie" : "amVzdS5hbG9uc29AZ21ha"
        },errorThrown);
        }
    });

今天关于使用PhoneGap和jQuery的跨域请求不起作用jquery 跨域请求的介绍到此结束,谢谢您的阅读,有关android – 如何在phonegap和jquery mobile上传任何类型的文件?、ios – 使用PhoneGap和jQuery Mobile for mobile app的页面之间的白色闪烁、jQuery ajax XML Http请求不起作用、jquery – Phonegap,cookies,跨域请求等更多相关知识的信息可以在本站进行查询。

本文标签: