2017-05-15 44 views
-1

我試圖評估一個ajax響應來知道API請求是成功還是失敗。如果請求成功,我想刪除添加客戶鏈接。爲什麼indexOf不正確評估ajax響應?

<span id='addCustomer'><a class='actionlink' id='addCustomerLink' href='javascript:addCustomer()'>Add Customer</a></span><span id='addCustomerResults'></span> 

下面的文本是所有失敗的請求」,‘添加失敗客戶的要求。’‘失敗’這個詞是沒有任何成功的響應。的indexOf應抓住單詞‘失敗’,但由於某些原因,事實並非如此。

$.ajax({ 
     type: 'post', 
     url: 'include/ajax.php?action=add', 
     data: $('#lead-form').serialize(), 
     success: function (response) { 
      $("#addCustomerResults").html(response); 

      if (response.indexOf("Failed") != -1) {   
       $('#addCustomer').html(""); // customer created so remove the add customer link 
      } 
     } 
    }); 

響應是一個簡單的文本字符串。想不通爲什麼添加客戶鏈接已經被刪除的響應是否包含「失敗」這個詞還是不行。

+0

大寫? – Hodrobond

+0

不幸的是沒有大寫 –

+2

我們無法調試這個。你需要添加一些調試代碼,看看它爲什麼失敗。 – epascarello

回答

-2

常AJAX函數的「成功」回調中的「響應」參數包含信息關於響應本身,而不是文本(或任何其他數據)。如果你想閱讀文本或JSON或任何其他返回的對象,那麼你將不得不打電話response.data。這是一個示例AJAX功能。

//Making an AJAX call 
$.ajax({ 
    type: "GET", 
    url: "host/resource/", 
    data: { name: "MyName", address: "123 Toronto St." }, 
    dataType: "json", 
    success: function (response) { 
     var returnedData = response.data; 
     console.log(JSON.stringify(returnedData)); 

     //Loop through JSON array 
     $.each(returnedData, function (indexInArray, valueOfElement) { 
      console.log(indexInArray, valueOfElement); 
     }); 
    }, 
    error: function (err) { 
     console.log(JSON.stringify(err)); 
    } 
}); 

在你的情況,因爲你正在尋找一個特定的字符串,你會做類似以下。

var blnFound = response.data.trim().toUpperCase().indexOf("VALUE_TO_SEARCH") > -1 

更好的解決方案是創建原型Javascript方法並直接調用它們,因此您不必執行上述所有操作。

+0

這是100%依賴於他的'ajax.php'文件返回。它很可能正在吐出字符串「失敗」。或者它可能是JSON。或者它可能是一百萬其他的事情。你不能假設他正在通過'data'屬性得到某種類型的JSON響應。 –

+0

這與[文檔](http://api.jquery.com/jquery.ajax/#jQuery-ajax-settings)完全矛盾,它指出'success'函數的第一個參數是數據本身:*數據從服務器返回,根據dataType參數或dataFilter回調函數格式化,如果指定* –