簡體   English   中英

JavaScript Ajax請求無法在Firefox和Google Chrome中運行,但在Safari中可以

[英]JavaScript Ajax request not working in Firefox and Google Chrome, but it is okay in Safari

我正在使用一些JavaScript將Ajax請求發送到Arduino網絡服務器並更改網頁上的HTML

在Safari中,這一直很好,但是當我嘗試在Firefox和Google Chrome中加載它時,文檔元素永遠不會更新。 在調試器控制台中,我可以看到返回的請求和響應,因此我猜測將響應解析為數組有問題嗎?

這是代碼:

function GetSwitchState()
{
    nocache = "&nocache=" + Math.random() * 1000000;
    var request = new XMLHttpRequest();
    request.onreadystatechange = function()
    {
        if (this.readyState == 4)  {
            if (this.status == 200) {
                if (this.responseText != null) {
                    var response = this.responseText;
                    var comma = ",";
                    var inputArray = response.split(comma);
                    var green = inputArray[0];
                    var red = inputArray[1];
                    var fault = inputArray[2];
                    var counter = inputArray[3];
                    document.getElementById('green').innerHTML = green;
                    document.getElementById("red").innerHTML = red;
                    document.getElementById("status").innerHTML = fault;
                    document.getElementById("cars").innerHTML = counter;
                }
            }
        }
    }
    request.open("GET", "url" + nocache, true);
    request.send(null);
    setTimeout('GetSwitchState()', 1000);
}

Arduino網絡服務器的響應是四個逗號分隔的值。

我今天所做的幾乎是一樣的!

當我向PHP文件運行Ajax請求並想返回一個數組時,我需要將return-datatype指定為“ json”。 然后,在我的PHP文件中,我返回了如下值:

return json_encode(array(
    'success' => false,
    'error' => $_POST['password_hashed']
));

我使用jQuery來運行請求。 看起來像這樣:

$.ajax({
    type: 'POST',
    url: 'script.php',
    data: 'password_hashed=' + hex_sha512(str_password) + '&email=' + str_email, //Clientside password hashing
    cache: false,
    dataType: 'json',
    success: function(value){
    //Ajax successfully ran
        alert(value.success + '_' + value.error); //=false_[hash]
    },
    error: function(){
    //Ajax error occured -> Display error message in specified element
        alert('error with request');
    }
});

我是兩天前剛開始使用Ajax的,這可能無濟於事,但是值得嘗試。

好的,看起來問題實際上已經解決了

{
            if (this.readyState == 4)  {
                if (this.status == 200) {

論點。 當我將其更改為:

{  
     if(response.readState == 4) {

我能夠在Firefox中跳過該聲明。 為了使狀態變為200而不是0,我需要修改arduino端的響應頭,使其包括:

Access-Control-Allow-Origin: *

在FireFox中允許跨源域請求。 一旦進行了這些更改,代碼就可以很好地工作了,我想我在數組假設的基礎上錯了樹。 謝謝您的幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM